PIL无法保存透明度。

15
from PIL import Image

img = Image.open('1.png')
img.save('2.png')
第一张图片有透明背景,但是当我保存它时,透明度消失了(背景变成了白色)。
我做错了什么?
2个回答

31

可能图片被索引了(在PIL中为“P”模式),因此透明度并没有在PNG的alpha通道中设置,而是在元数据信息中设置。

您可以使用以下代码获取具有透明背景色板索引:

from PIL import Image

img = Image.open('1.png')
png_info = img.info
img.save('2.png', **png_info)

image info是一个字典,因此您可以检查它以查看其包含的信息:

例如:如果您打印它,将会得到以下输出:

{'transparency': 7, 'gamma': 0.45454, 'dpi': (72, 72)}

信息的保存会因创建原始PNG工具而异,但在这里对你重要的是“透明度”键。在示例中,它指出调色板索引“7”必须被视为透明。


它起作用了,谢谢!不过有点奇怪,这些属性没有自动保存。 - Maxim Sloyko
这个问题仍然存在。从Photoshop保存的32bpp透明图像“PNG image data,1063 x 857,8-bit / color RGBA,non-interlaced”遇到了PIL的问题。 - Orwellophile
有没有想法如何将这个解决方案扩展到创建GIF的功能? - undefined

7

你可以始终将类型强制为“RGBA”,

img = Image.open('1.png')
img = img.convert('RGBA')
img.save('2.png')

6
当然可以,但这样做他将无法从格式上生成与原始图像相同的图像。 - Lucas S.
1
对于第二行,您需要使用“img = img.convert('RGBA')”。 - Kaaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接