PIL Image.open 创建损坏的图像

PIL Image.open creates corrupted image

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 有。两者也位于同一目录中。我不确定这是否与问题有关;这只是一个观察。

此外,当读取图像中的像素数据时,banana.png returns 0banana2.png returns (0,0,0,0) 在透明像素上。同样,这只是一个观察结果。

原始文件信息

如有任何帮助,我们将不胜感激!


编辑:

运行 我们的程序 没有 转换有相同的结果:

显示图片:

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

P.S。您是否尝试过在没有 convert() 的情况下调用 show() 时查看它是否仍然损坏?

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

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

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