Apertura de PNG con PIL / Almohada

Estoy intentando usar PIL / Pillow en Python para abrir una imagen PNG. Usted pensaría que sería trivial, pero las imágenes se muestran dañadas.

Aquí hay una imagen de ejemplo:

Intenté cargarlo y mostrarlo, usando Python 3.4 y 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() >>> 

Lo que me muestran es esto:

¿Alguien tiene alguna idea de por qué es eso y cómo resolverlo? (La corrupción ocurre no solo cuando la muestro, sino también cuando bash pegarla en otra imagen, que es mi necesidad original).

Como dice @wiredfool , la imagen se está convirtiendo a RGB antes de que se muestre. Desafortunadamente, eso significa que el canal alfa simplemente se está cayendo. Desea hacer su propia conversión que mezcle la imagen con un fondo blanco en su lugar.

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

La documentación para paste muestra que también ignora el canal alfa. Debe especificar la imagen en dos lugares, uno para la fuente y otro para la máscara.

 base.paste(image, box, image) 

Image.show() escribe la imagen como un BMP (en windows), luego la abre con el visor. Desafortunadamente, el escritor BMP no conserva el canal alfa, por lo que solo está viendo los canales RGB de la imagen.