繁体   English   中英

PIL : PNG 图像作为 JPG 图像的水印

[英]PIL : PNG image as watermark for a JPG image

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

这是一个使用 image magick 完成工作的命令:

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

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

这是我尝试过的:

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 文档声明:“如果您想将图像与它们的 alpha 通道相关联,请参阅 alpha_composite()。”

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

最终,我更仔细地阅读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)

而且……它奏效了!

我执行代码时遇到问题,出现此错误:

/usr/lib/python3/dist-packages/PIL/Image.py:918: UserWarning: Palette images with Transparency   expressed in bytes should be converted to RGBA images
  'to RGBA images')
Traceback (most recent call last):
  File "watermark.py", line 31, in <module>
    image_copy.paste(logo, (25, 25), logo)
  File "/usr/lib/python3/dist-packages/PIL/Image.py", line 1406, in paste
    self.im.paste(im, box, mask.im)

这是我的代码

image = Image.open('200366-2843-5.jpg')
logo = Image.open('DALILIMMO-LOGO.png')

image_copy = image.copy()

position = ((image_copy.width - logo.width), (image_copy.height - logo.height))

# modify the paste by adding the logo as the third argument as per the explanation above.
image_copy.paste(logo, position, logo)

image_copy.save('watermarked_py.jpg')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM