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

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

最初の画像は透明な背景を持つ保存されませんが、私はそれを保存する場合、透明性は私が間違っているのは何PILは、透明性

(背景が白である)なくなっていますか?

答えて

30

おそらく画像はインデックス付けされています(PILのモード「P」)ので、透明度はPNGアルファチャンネルではなくメタデータ情報に設定されます。

次のコードで透明な背景のパレットインデックスを取得することができます。

from PIL import Image 

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

画像情報が辞書ですので、あなたはそれが持っている情報を見るために、それを調べることができます。

例えば:あなたの場合あなたは、次のような出力が得られます、それを印刷:

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

情報がオリジナルのPNGを作成したツールによって異なりますが、importanあるものでしょう保存ここでは "透明"キーがあります。この例では、パレットインデックス "7"は透明として扱われなければならないと言います。

+0

をタイプを強制することができます!しかし、これらのプロパティは自動的に保存されないというのは奇妙なことです。 –

4

あなたはいつもあなたに感謝し、それが働いていた、 "RGBA" に

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

もちろん、形式的に見て元のイメージと同じイメージを生成するわけではありません。 –

+0

+1。ああ、本当のLucas S. –