使用 PIL/Pillow 打开 PNG

Opening PNG with PIL/Pillow

我正在尝试使用 Python 中的 PIL/Pillow 打开 PNG 图像。你可能认为这很微不足道,但图像显示已损坏。

这是一个示例图片:

我尝试使用 Python 3.4 和 Pillow 2.7.0 加载并显示它:

$ python
Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL.Image
>>> image = PIL.Image.open(r'C:\Users\Administrator\Dropbox\Desktop\example.png')
>>> image.show()
>>>

我得到的显示是这样的:

有谁知道这是为什么以及如何解决? (损坏不仅在我展示时发生,而且在我尝试将其粘贴到另一个图像时也会发生,这是我最初的需要。)

Image.show() 将图像写入 BMP(在 windows 上),然后用查看器打开它。不幸的是,BMP 编写器不保留 alpha 通道,因此您只能查看图像的 RGB 通道。

作为 ,图像在显示之前正在转换为 RGB。不幸的是,这意味着 alpha 通道只是被丢弃了。您想进行自己的转换,将图像与白色背景混合。

Image.composite(image, Image.new('RGB', image.size, 'white'), image).show()

paste 的文档显示它也忽略了 alpha 通道。您需要在两个地方指定图像,一个用于源,一个用于遮罩。

base.paste(image, box, image)