【问题标题】:Setting an image's alpha value (via PIL/Pillow)设置图像的 alpha 值(通过 PIL/Pillow)
【发布时间】:2018-02-02 19:13:18
【问题描述】:

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

有人可以帮我改进吗?

【问题讨论】:

    标签: python python-imaging-library pillow


    【解决方案1】:

    如您所见,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 来合并图像,但令人讨厌的是,您可能首先必须填充或裁剪粘贴的图像,使其与基本图像大小相同。

    【讨论】:

    • 谢谢。作为图像处理的新手,我还想知道您是否可以稍微了解一下图像遮罩的使用(以您生成遮罩的方式)。
    • 这里的Mask只是Pillow对alpha通道的称呼,其中每个像素的值表示它的透明程度。要组合两张图像,您可以使用已经与其中一张相关联的 Alpha 通道(如您的示例中)或创建自己的蒙版。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2022-05-21
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多