PILは透明度を保存しません
-
22-07-2019 - |
質問
from PIL import Image
img = Image.open('1.png')
img.save('2.png')
最初の画像の背景は透明ですが、保存すると透明度がなくなります(背景は白)
何が間違っているのですか?
解決
おそらく画像にはインデックスが付けられているため(PILのモード「P」)、PNGアルファチャネルではなくメタデータ情報で透明度が設定されます。
次のコードを使用して、透明な背景パレットのインデックスを取得できます。
from PIL import Image
img = Image.open('1.png')
png_info = img.info
img.save('2.png', **png_info)
画像情報は辞書であるため、検査して情報を確認できます。
eg:印刷すると、次のような出力が得られます。
{'transparency': 7, 'gamma': 0.45454, 'dpi': (72, 72)}
そこに保存される情報は、元のPNGを作成したツールによって異なりますが、ここで重要なのは「透明性」です。キー。例では、パレットインデックス" 7"透明として扱う必要があります。
他のヒント
いつでもタイプを" RGBA"に強制できます。
img = Image.open('1.png')
img.convert('RGBA')
img.save('2.png')
所属していません StackOverflow