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

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

Das erste Bild hat einen transparenten Hintergrund, aber wenn ich es speichern, wird die Transparenz gegangen (Hintergrund weiß)PIL speichert keine Transparenz

Was mache ich falsch?

Antwort

30

Wahrscheinlich ist das Bild indiziert (Modus "P" in PIL), so dass die Transparenz nicht in PNG Alpha-Kanal, sondern in Metadaten-Informationen festgelegt ist.

Sie können mit dem folgenden Code transparenten Hintergrund Palettenindex erhalten:

from PIL import Image 

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

Bildinfo ist ein Wörterbuch, so dass Sie es überprüfen können die Informationen zu sehen, dass es hat:

zB: Wenn Sie drucken Sie es aus Sie eine Ausgabe wie die folgende erhalten:

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

die Informationen dort gespeichert variieren auf dem Werkzeug abhängig, die die ursprüngliche PNG erstellt, aber was ist importan Für Sie ist hier der "Transparenz" -Schlüssel. Im Beispiel heißt es, dass der Palettenindex "7" als transparent behandelt werden muss.

+0

Es funktionierte, danke! Seltsamerweise wurden diese Eigenschaften nicht automatisch gespeichert. –

4

Sie können immer den Typ erzwingen "RGBA",

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

Natürlich, aber auf diese Weise erzeugt er nicht das gleiche Bild wie das Original, vom Format her. –

+0

+1. Ah ja, sehr wahr Lucas S. –

Verwandte Themen