PIL ne sauve pas la transparence
-
22-07-2019 - |
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?
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')