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

时间:2017-04-30 16:32:00

标签: python python-imaging-library pillow

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

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

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()。不幸的是,这个功能要求两个图像具有相同的大小和模式。

1 个答案:

答案 0 :(得分:16)

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

而且......它有效!