[英]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.