设置图像的 alpha 值(通过 PIL/Pillow)
Setting an image's alpha value (via PIL/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 透明度;它是完全坚固的。示例:
有人可以帮我改进吗?
如您所见,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
来组合图像,尽管很烦人,您可能首先必须填充或裁剪粘贴的图像,使其与基本图像的大小相同。
我有一个基本图像,我试图在其上粘贴一个 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 透明度;它是完全坚固的。示例:
有人可以帮我改进吗?
如您所见,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
来组合图像,尽管很烦人,您可能首先必须填充或裁剪粘贴的图像,使其与基本图像的大小相同。