PIL 粘贴为我提供了透明像素,而不是 RGBA 蒙版 alpha 为零的目标图像像素

问题描述 投票:0回答:1

V3.png: V3.png

A7.png: A7.png

#!/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 像素覆盖,无论是否透明。

需要明确的是,我希望这样: expectation.png

但是output.png是这样的: output.png

我已经检查了输出图像的透明像素,只是为了确定,它们都是白色的,alpha 为零。 我尝试过使用和不使用“mask =”关键字来调用粘贴。

我做错了什么?

编辑:我可以接受不使用 PIL 的 python 解决方案。

更新1:

我想是我。它按预期工作,只是不像我想象的那样工作。 当 Alpha 为 255 时,源像素将被复制到目标上。这实际上意味着目标像素将被源像素替换,即使后者是透明的,而不是在源像素透明时被保留。

我认为我需要执行中间步骤来构建本例所需的蒙版,或者可能执行两次粘贴操作。

所以标题是错误的。当这种不需要的效果发生时,alpha 值为 255。

更新2:

我认为我需要对两个图像 alpha 值执行逻辑 AND 运算来构建我的蒙版。知道如何做到这一点吗?

python-imaging-library
1个回答
0
投票

最后我通过粘贴两次解决了这个问题,因为第一次周围必要的蒙版已经生成了:

#!/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()
© www.soinside.com 2019 - 2024. All rights reserved.