gpt4 book ai didi

python - Pillow 无法正确处理 PNG 文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:26 24 4
gpt4 key购买 nike

我可以成功地将矩形图像转换为具有透明圆角的 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

最佳答案

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

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

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

If a mask is given, this method updates only the regions indicated by the mask. You can use either "1", "L" or "RGBA" images (in the latter case, the alpha band is used as mask). Where the mask is 255, the given image is copied as is. Where the mask is 0, the current value is preserved. Intermediate values will mix the two images together, including their alpha channels if they have them.

我们在这里所做的是提供一个 RGBA 图像作为 mask ,并使用 alpha channel 作为 mask 。

关于python - Pillow 无法正确处理 PNG 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39732548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com