2009-08-05 15 views
10
from PIL import Image 

img = Image.open('1.png') 
img.save('2.png') 

La primera imagen tiene un fondo transparente, pero cuando lo guardo, la transparencia se ha ido (fondo es blanco)PIL no guarda la transparencia

¿Qué estoy haciendo mal?

Respuesta

30

Probablemente la imagen está indexada (modo "P" en PIL), por lo que la transparencia no se establece en el canal alfa PNG, sino en la información de metadatos.

, usted puede obtener índice de paleta de fondo transparente con el siguiente código:

from PIL import Image 

img = Image.open('1.png') 
png_info = img.info 
img.save('2.png', **png_info) 

Imagen es un diccionario, para que pueda inspeccionarlo para ver la información que tiene:

por ejemplo: si imprimirlo obtendrá una salida como la siguiente:

{'transparency': 7, 'gamma': 0.45454, 'dpi': (72, 72)} 

la información se guarda allí variará dependiendo de la herramienta que creó el PNG original, pero lo que es importan t para usted aquí es la clave de "transparencia". En el ejemplo, dice que el índice de paleta "7" debe tratarse como transparente.

+0

Funcionó, gracias! Aunque es extraño que esas propiedades no se hayan guardado automáticamente. –

4

siempre se puede forzar el tipo de "RGBA",

img = Image.open('1.png') 
img.convert('RGBA') 
img.save('2.png') 
+5

Por supuesto, pero de esa forma no generará la misma imagen que la original, desde el formato en cuestión. –

+0

+1. Ahh sí, muy cierto Lucas S. –

Cuestiones relacionadas