Question

from PIL import Image

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

La première image a un arrière-plan transparent, mais lorsque je l'enregistre, la transparence disparaît (l'arrière-plan est blanc)

Qu'est-ce que je fais de travers?

Était-ce utile?

La solution

L’image étant probablement indexée (mode "P" dans PIL), la transparence n’est pas définie dans le canal alpha PNG, mais dans les informations de métadonnées.

Vous pouvez obtenir un index de palette d'arrière-plan transparent avec le code suivant:

from PIL import Image

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

info est un dictionnaire, vous pouvez donc l'inspecter pour voir les informations qu'il contient:

Exemple: si vous l’imprimez, vous obtiendrez une sortie du type suivant:

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

Les informations enregistrées ici varieront en fonction de l'outil qui a créé le fichier PNG d'origine, mais ce qui est important pour vous ici, c'est le paramètre "transparence". clé. Dans l'exemple, il est indiqué que l'index de palette "7" doit être traité comme transparent.

Autres conseils

Vous pouvez toujours forcer le type à "RGBA",

img = Image.open('1.png')
img.convert('RGBA')
img.save('2.png')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top