枕头处理PNG文件不正确

时间:2016-09-27 19:10:44

标签: python pillow

我可以成功地将矩形图像转换为具有透明圆角的png,如下所示:

.png image with transparent corners

然而,当我拍摄这个透明的角落图像并且我想在Pillow生成的另一张图像中使用它时,我最终得到了这个:transparent corners turned black by Pillow

透明角落变黑。我已经玩了一段时间但我找不到任何方式,一旦我用Pillow将图像的透明部分放在另一个图像上,它们就不会变成黑色。 这是我使用的代码:

mask = Image.open('Test mask.png').convert('L')
im = Image.open('boat.jpg')
im.resize(mask.size)
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.putalpha(mask)
output.save('output.png')

im = Image.open('output.png')

image_bg = Image.new('RGBA', (1292,440), (255,255,255,100))
image_fg = im.resize((710, 400), Image.ANTIALIAS)
image_bg.paste(image_fg, (20, 20))

image_bg.save('output2.jpg')

有解决方案吗?感谢。

根据一些建议,我将第二张图像导出为PNG,但最后我得到了一张带孔的图像: enter image description here 显然,我希望第二张图像具有一致的白色背景,没有孔。

这是我真正想要的结果。橙色仅放置在那里以突出显示图像本身。它是一张白色背景的矩形图像,其中有一个带圆角的图片。 enter image description here

1 个答案:

答案 0 :(得分:1)

如果将带有透明像素的图像粘贴到另一个图像上,则也会复制透明像素。看起来您只想粘贴非透明像素。在这种情况下,您需要paste函数的掩码。

image_bg.paste(image_fg, (20, 20), mask=image_fg)

请注意这里的第三个参数。来自文档:

  

如果给出了掩码,则此方法仅更新指示的区域   面具。您可以使用" 1"," L"或" RGBA"图像(在后者中   例如,alpha波段用作掩模)。掩码是255的地方   给定的图像按原样复制。掩码为0时,当前值   保留下来。中间值将两个图像混合在一起,   包括他们的alpha通道。

我们在这里做的是提供一个RGBA图像作为掩码,并使用alpha通道作为掩码。