PIL не сохраняет прозрачность

from PIL import Image

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

Первое изображение имеет прозрачный фон, но когда я его сохраняю, прозрачность исчезает (фон белый)

Что я делаю неправильно?

Ответ 1

Вероятно, изображение индексируется (режим "P" в PIL), поэтому прозрачность не установлена ​​в альфа-канале 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" должен рассматриваться как прозрачный.

Ответ 2

Вы всегда можете заставить тип "RGBA",

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