【问题标题】:PIL : PNG image as watermark for a JPG imagePIL : PNG 图像作为 JPG 图像的水印
【发布时间】:2017-04-30 16:32:00
【问题描述】:

我正在尝试从 JPEG 照片 (1600x900) 和带有 alpha 通道 (400x62) 的 PNG 徽标制作合成图像。

这是一个使用图像魔法完成工作的命令:

composite -geometry +25+25 watermark.png original_photo.jpg watermarked_photo.jpg

现在我想在 python 脚本中做类似的事情,而不用 PIL 从外部调用这个 shell 命令。

这是我尝试过的:

photo = Image.open('original_photo.jpg')
watermark = Image.open('watermark.png')
photo.paste(watermark, (25, 25))

这里的问题是完全忽略了 alpha 通道,结果就像我的水印是黑白的,而不是 rbga(0, 0, 0, 0)rbga(255, 255, 255, 128)

确实,PIL docs state:“如果您想根据 Alpha 通道组合图像,请参阅 alpha_composite()。”

所以我查看了alpha_composite()。不幸的是,此功能要求两个图像具有相同的大小和模式。

【问题讨论】:

    标签: python python-imaging-library pillow


    【解决方案1】:

    最终,我更仔细地阅读了Image.paste() 并发现了这一点:

    如果给定掩码,则此方法仅更新掩码指示的区域。您可以使用“1”、“L”或“RGBA”图像(在后一种情况下,使用 alpha 波段作为掩码)。如果掩码为 255,则将给定图像复制为是。如果掩码为 0,则保留当前值。中间值会将两个图像混合在一起,包括它们的 Alpha 通道(如果有的话)。

    所以我尝试了以下方法:

    photo = Image.open('original_photo.jpg')
    watermark = Image.open('watermark.png')
    photo.paste(watermark, (25, 25), watermark)
    

    而且……它奏效了!

    【讨论】:

    • 添加第二个“水印”参数是关键一步!我为此挣扎了一会儿。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2018-01-04
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多