13
from PIL import Image

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

最初の画像は背景が透明なのですが、保存すると透明度がなくなります(背景が白)

私は何を間違っていますか?

4

2 に答える 2

31

おそらく画像はインデックス化されているため (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 を作成したツールによって異なりますが、ここで重要なのは「透明度」キーです。例では、パレット インデックス "7" を透明として扱う必要があることを示しています。

于 2009-08-05T14:55:20.600 に答える
6

タイプを「RGBA」に強制することはいつでもできます。

img = Image.open('1.png')
img.convert('RGBA')
img.save('2.png')
于 2009-08-05T15:38:30.077 に答える