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

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

La prima immagine ha uno sfondo trasparente, ma quando lo salvo, la trasparenza è andato (sfondo è bianco)PIL non salva la trasparenza

Che cosa sto facendo di sbagliato?

risposta

30

Probabilmente l'immagine viene indicizzata (modalità "P" in PIL), quindi la trasparenza non è impostata nel canale alfa PNG, ma nelle informazioni sui metadati.

è possibile ottenere trasparente indice sfondo tavolozza con il seguente codice:

from PIL import Image 

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

Info d'immagine è un dizionario, in modo da poter esaminare per vedere le informazioni che esso ha:

esempio: se si stamparlo si otterrà un output simile al seguente:

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

le informazioni salvate non varia a seconda dello strumento che ha creato l'originale PNG, ma ciò che è importan per te ecco la chiave "trasparenza". Nell'esempio si dice che l'indice della tavolozza "7" deve essere trattato come trasparente.

+0

Ha funzionato, grazie! Un po 'strano, però, che quelle proprietà non sono state salvate automaticamente. –

4

si può sempre forzare il tipo da "RGBA",

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

Ovviamente, ma in questo modo non genererà la stessa immagine dell'originale, dal punto di vista del formato. –

+0

+1. Ah sì, molto vero Lucas S. –

Problemi correlati