在SO上有很多关于这个问题的答案,但输出结果不是预期的。
目标是合并两个RGBA图像。每个图像的alpha通道信息不同。
当前(简化)代码如下:
from PIL import Image
image = '1.png'
watermark = '2.png'
wmark = Image.open(watermark)
img = Image.open(image)
img.paste(wmark, (0, 0), wmark)
img.save("result.png", "PNG")
这两个图片分别是:
背景
![Background](https://istack.dev59.com/7rq4D.webp)
![Foreground](https://istack.dev59.com/KrYJL.webp)
![Expected output](https://istack.dev59.com/vtdKQ.webp)
![Actual result](https://istack.dev59.com/PRwB5.webp)
预期结果 - alpha 通道
![Expected result - alpha channel](https://istack.dev59.com/ZhXHB.webp)
![Actual result - alpha channel](https://istack.dev59.com/HuOy8.webp)
编辑 - 针对 @zenpoy 评论的说明:
如果前景图像有一定的不透明度,我希望在叠加两个图像时将其考虑在内,但我不希望第二个图像的 Alpha 通道被添加到第一个图像中。 就像将玻璃片(前景图像)放在纸张图像(背景)前面一样。
换句话说,如果背景图像是 RGB 而不是 RGBA,则最终图像应该没有 Alpha 信息。