我尝试使用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()
。不幸的是,这个功能要求两个图像具有相同的大小和模式。
答案 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)
而且......它有效!