#!/usr/bin/env python3
from PIL import Image
img1 = Image.open(r"V3.png")
img2 = Image.open(r"A7.png")
img1.paste(img2, (0,0), mask = img1)
img1.show()
img1.save("output.png")
我希望生成的图像完全是 V3,仅在绿色部分上有 A7 不透明像素。相反,V3 的非透明像素将被 A7 像素覆盖,无论是否透明。
我已经检查了输出图像的透明像素,只是为了确定,它们都是白色的,alpha 为零。 我尝试过使用和不使用“mask =”关键字来调用粘贴。
我做错了什么?
编辑:我可以接受不使用 PIL 的 python 解决方案。
更新1:
我想是我。它按预期工作,只是不像我想象的那样工作。 当 Alpha 为 255 时,源像素将被复制到目标上。这实际上意味着目标像素将被源像素替换,即使后者是透明的,而不是在源像素透明时被保留。
我认为我需要执行中间步骤来构建本例所需的蒙版,或者可能执行两次粘贴操作。
所以标题是错误的。当这种不需要的效果发生时,alpha 值为 255。
更新2:
我认为我需要对两个图像 alpha 值执行逻辑 AND 运算来构建我的蒙版。知道如何做到这一点吗?
最后我通过粘贴两次解决了这个问题,因为第一次周围必要的蒙版已经生成了:
#!/usr/bin/env python3
from PIL import Image
img1 = Image.open(r"V3.png")
img2 = Image.open(r"A7.png")
mask = img1.copy()
mask.paste(img2, (0,0), img1)
img1.paste(img2, (0,0), mask)
img1.show()