Opening PNG with PIL/Pillow

試著忘記壹切 提交于 2020-01-02 03:00:27

问题


I'm trying to use PIL/Pillow in Python to open a PNG image. You'd think it'd be trivial, but the images are showing up corrupted.

Here's an example image:

I tried loading it and showing it, using Python 3.4 and 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()
>>>

What I get displayed is this:

Does anyone have any idea why that is and how to solve it? (The corruption happens not only when I show it, but also when I'll try to paste it into another image, which is my original need.)


回答1:


As @wiredfool says, the image is being converted to RGB before it's shown. Unfortunately that means the alpha channel is simply being dropped. You want to do your own conversion that mixes the image with a white background instead.

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

The documentation for paste shows that it ignores the alpha channel as well. You need to specify the image in two places, one for the source and one for the mask.

base.paste(image, box, image)



回答2:


Image.show() writes the image as a BMP (on windows), then opens it with the viewer. Unfortunately the BMP writer doesn't preserve the alpha channel, so you're just viewing the RGB channels of the image.



来源:https://stackoverflow.com/questions/29107694/opening-png-with-pil-pillow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!