【问题标题】:Python (PIL): Lighten transparent image and paste to another onePython(PIL):使透明图像变亮并粘贴到另一个
【发布时间】:2012-12-01 18:06:03
【问题描述】:

我有两个相同大小的 png 图像 (A & B),第二个 (B) 是部分透明的。

如果我使用代码将图像 B 粘贴到图像 A 中

base.paste(overlay, mask=overlay)

我得到了它们的近乎完美的组合。

但是我想在将图像 B 粘贴到图像 A 之前使图像 B 变亮。我尝试使用像 Image.new("L", size, 80) 这样的蒙版,我可以用它使图像 (B) 变亮,但它也使图像 (A) 变暗并且不得修改。

在命令行上,我可以像这样使用 ImageMagick 做我想做的事:

composite -dissolve 40 overlay.png base.png result.png

这正是我所需要的,但我如何用 python 做到这一点。

【问题讨论】:

    标签: python transparency python-imaging-library imaging


    【解决方案1】:

    根据我自己的理解,溶解选项仅修改 Alpha 通道。因此,如果您希望您的 Alpha 通道仅保留其值的 40%,您可以在 PIL 中执行相同操作:

    from PIL import Image
    
    overlay = Image.open('overlay.png')
    base = Image.open('base.png')
    
    bands = list(overlay.split())
    if len(bands) == 4:
        # Assuming alpha is the last band
        bands[3] = bands[3].point(lambda x: x*0.4)
    overlay = Image.merge(overlay.mode, bands)
    
    base.paste(overlay, (0, 0), overlay)
    base.save('result.png')
    

    在这段代码中,我将图像分割成多个波段。如果有四个,我假设最后一个代表 alpha 通道。因此,我只需将其值乘以 0.4 (40%),然后创建一个新图像以粘贴到基础图像上。

    【讨论】:

    • 非常感谢。我必须将两个图像都转换为“RGBA”,然后得到与上述 imagemagick-command 相同的结果。再次感谢!!!
    • 如果我使用原始的叠加图像作为粘贴方法中的第一个参数并使用修改后的叠加图像作为掩码,我已经进行了一些实验,我得到了最好的结果:@987654322 @
    猜你喜欢
    • 2013-11-02
    • 2021-06-05
    • 2014-08-24
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多