Python PIL:将透明图像混合到另一个图像上

8

我需要使用Python的PIL库将一张图片混合到另一张图片上。

如下图所示,我的两个源图片是A和B。 当我执行以下操作时:

imageA.paste(imageB, (0, 0), imageB)

我的结果是C,但灰色背景顶部的部分现在是透明的。图像D是我在Photoshop中将B叠加在A上得到的结果,也是我需要PIL实现的结果。

我做错了什么?如何在PIL中将B叠加在A上,以获得D而不是C?

示例图片


imageA.paste(imageB, (0, 0), mask=imageB)会发生什么? - RickyA
@Germano:那也不行,图像B有一个投影阴影,如果我这样做,它会被切掉。 - Daniela
9
不要使用PIL,应该使用Pillow。请参见https://dev59.com/xm435IYBdhLWcg3wlRMf#15919897。 - Mark Ransom
1
源和掩码在哪种模式下?尝试将它们设置为RGBA模式进行混合。 - user1415946
可能是 https://dev59.com/xm435IYBdhLWcg3wlRMf 的重复问题。 - Charles Merriam
显示剩余2条评论
2个回答

3

使用RGBA进行透明度掩码

imageA.paste(imageB, (0, 0), imageB.convert('RGBA'))

谢谢!这是最好的解决方案!第三个参数是透明度图,但你不需要手动创建它,而是使用PIL创建它。这应该是被接受的答案。 - gempir

1

目前我无法发表评论(限制回复)。

但是根据您的需求,我认为您真正需要做的是:

imageB.paste(imageA, (0, 0), imageA)

基本上,就是将B设置为背景图像以获得所需的结果,因为我在D中看到了这一点。
编辑: 再找找,我发现了这个: https://dev59.com/xm435IYBdhLWcg3wlRMf#15919897 我认为你应该绝对使用alpha_composite方法,因为对于具有透明度的背景图像,paste不会按预期工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接