我可以成功地将矩形图像转换为具有透明圆角的png,如下所示:
然而,当我拍摄这个透明的角落图像并且我想在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,但最后我得到了一张带孔的图像: 显然,我希望第二张图像具有一致的白色背景,没有孔。
答案 0 :(得分:1)
如果将带有透明像素的图像粘贴到另一个图像上,则也会复制透明像素。看起来您只想粘贴非透明像素。在这种情况下,您需要paste
函数的掩码。
image_bg.paste(image_fg, (20, 20), mask=image_fg)
请注意这里的第三个参数。来自文档:
如果给出了掩码,则此方法仅更新指示的区域 面具。您可以使用" 1"," L"或" RGBA"图像(在后者中 例如,alpha波段用作掩模)。掩码是255的地方 给定的图像按原样复制。掩码为0时,当前值 保留下来。中间值将两个图像混合在一起, 包括他们的alpha通道。
我们在这里做的是提供一个RGBA图像作为掩码,并使用alpha通道作为掩码。