我有一个基本图像,在此基础上,我尝试粘贴50%alpha的黑色条带。以下是我一直在测试的内容:
from PIL import Image, ImageFont, ImageDraw
base_width, base_height = base_img.size
if base_img.mode != 'RGB':
base_img = base_img.convert("RGB")
black_strip = Image.new('RGBA', (base_width, 20),(0,0,0,128)) #creating the black strip
offset = (0,base_height/2)
base_img.paste(background,offset)
生成的黑色条带没有Alpha透明度;它完全是坚实的。例如:
有人可以帮我改进吗?
答案 0 :(得分:3)
正如您所注意到的,Image.paste
忽略了粘贴图像的Alpha通道。但是,它确实需要一个可选的mask
参数。这会接受RGBA图像作为输入,提取其alpha通道,因此您应该能够再次传入粘贴的图像:
base_img.paste(black_strip, offset, black_strip)
如果原始图像没有蒙版,也可以轻松生成蒙版。例如,以下内容将粘贴RGB图像,但使其黑色区域透明:
mask = rgb_img.point(lambda i: min(i * 25, 255)).
base_img.paste(rgb_img, offset, mask)
PS 以上建议仅在基本图像没有Alpha通道时才有效(其模式为RGB,而非RGBA)。否则你可能应该使用Image.alpha_composite
来组合图像,尽管你可能首先需要填充或裁剪粘贴的图像,使其与基本图像的大小相同。