PIL Image.open会创建损坏的图像

时间:2018-03-12 15:47:51

标签: python python-3.x image python-imaging-library pillow

Python的PIL模块在​​过去的项目中对我来说一直很好,但是我注意到对于某些图像在打开和显示颜色时会被破坏,而对于其他图像则没问题。但是,保存它对两个图像都很好。有没有理由说这只适用于某些图像?

实施例

from PIL import Image

img = Image.open("banana.png")
img.convert("RGBA")
img.show()
img.save('out.png')
img1 = Image.open("banana2.png")
img1.convert("RGBA")
img1.show()
img1.save('out2.png')

原始图片

banana.png banana2.png

显示图像

tmpi8l0e6nk.png tmpnr61e6ib.png

已保存的图片

out.png out2.png

此外,我只注意到两个图像之间的一个区别; banana.png没有颜色配置文件,而banana2.png则没有颜色配置文件。两者都位于同一目录中。我不确定这是否与问题有关;这只是一个观察。

此外,在读取图像中的像素数据时,banana.png会返回0,而banana2.png会在透明像素上返回(0,0,0,0)。再次,这只是一个观察。

原始文件信息

Screenshot

任何帮助将不胜感激!

编辑:

运行我们的程序而不用转换具有相同的结果:

显示图片:

tmpj6g2tkbk.png tmppq7nt2zg.png

2 个答案:

答案 0 :(得分:1)

我猜这与在没有颜色配置文件的图片上调用convert("RGBA")有关。 PIL可能需要这些信息。

P.S。在没有show()致电convert()时,您是否尝试过查看它是否仍然已损坏?

这里是PIL convert源代码https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.convert

答案 1 :(得分:0)

当PIL显示带show的图像时,它会删除所有透明度。最简单的方法是传递这些透明区域中存在的任何颜色值。这取决于创建图像的应用程序。

您的第一张图片在透明区域中具有随机图像颜色,而第二张图像使用白色。