Question summary:我的预期结果是,无论背景图像的宽度和高度如何,水印都能以对角线为框架,始终符合限制条件,并且尺寸能保持徽标的质量.
为了不丢失我用作水印的图像的质量,我不得不从我要粘贴它的图像的宽度重新调整它的大小,但正如你在我将在代码下面发布的图像中所看到的,当图像的高度太小时,水印超出了图像的限制.
如果我需要根据另一幅图像的宽度来调整水印以保持质量,我应该如何调整高度和宽度,以便水印完全适合另一幅图像,而不管其高度或宽度如何?
from PIL import Image
def watermark_with_transparency(input_image_path,
output_image_path,
watermark_image_path):
TRANSPARENCY = 20
angle = 30
base_image = Image.open(input_image_path)
w_img, h_img = base_image.size
basewidth = w_img
watermark = Image.open(watermark_image_path)
wpercent = (basewidth/float(watermark.size[0]))
hsize = int((float(watermark.size[1])*float(wpercent)))
watermark = watermark.resize((basewidth,hsize), Image.ANTIALIAS)
watermark = watermark.rotate( angle, expand=1 )
w_logo, h_logo = watermark.size
center_y = int(h_img / 2)
center_x = int(w_img / 2)
top_y = center_y - int(h_logo / 2)
left_x = center_x - int(w_logo / 2)
if watermark.mode!='RGBA':
alpha = Image.new('L', (w_img, h_img), 255)
watermark.putalpha(alpha)
paste_mask = watermark.split()[3].point(lambda i: i * TRANSPARENCY / 100.)
base_image.paste(watermark, (left_x,top_y), mask=paste_mask)
base_image.show()
base_image.save(output_image_path)
if __name__ == '__main__':
watermark_with_transparency(
'jogos_de_hoje_na_tv.png',
'watermark_create.png',
'logo_com_transparencia.png'
)
Current result:
我试着添加这样的宽度:
basehight = h_img
hpercent = (basehight/float(watermark.size[0]))
wsize = int((float(watermark.size[0])*float(hpercent)))
watermark = watermark.resize((wsize,hsize), Image.ANTIALIAS)
但结果是一个高度很大的水印,在尺寸调整上没有任何质量.