设置图像的alpha值(通过PIL / Pillow)

时间:2017-05-02 04:30:47

标签: python python-imaging-library pillow

我有一个基本图像,在此基础上,我尝试粘贴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透明度;它完全是坚实的。例如:

enter image description here

有人可以帮我改进吗?

1 个答案:

答案 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来组合图像,尽管你可能首先需要填充或裁剪粘贴的图像,使其与基本图像的大小相同。