2009-08-05 289 views
10
from PIL import Image 

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

第一图像具有透明背景,但是当我保存它,透明度消失(背景为白色)PIL不保存透明度

我在做什么错?

回答

30

图像可能被编入索引(PIL模式为“P”),因此透明度不是在PNG Alpha通道中设置的,而是在元数据信息中设置的。

你可以得到透明背景调色板索引用下面的代码:

from PIL import Image 

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

图像信息是一本字典,所以你可以检查它看到的信息,它具有:

例如:如果您打印你会得到像输出如下:

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

的信息保存在该处将根据创建原始PNG工具各不相同,但什么是importan这里给你的是“透明度”键。在这个例子中,调色板索引“7”必须被视为透明。

+0

它的工作,谢谢!不过有点奇怪,那些属性没有自动保存。 – 2009-08-06 06:13:54

4

您可以随时强制类型为 “RGBA”,

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

当然,但从那个方面来说,他不会像格式明智的那样生成与原始图像相同的图像。 – 2009-08-05 16:38:14

+0

+1。啊,是的,非常真实的卢卡斯S. – 2009-08-06 13:59:15