PIL Режим изображения "P" → "RGBA"

Это моя проблема:

import Image
im = Image.open("1.png")
im.show()
print im.mode
im.convert("RGBA").save("2.png")

Хорошо, с моим изображением вы можете видеть разницу.
Мой вопрос: как его правильно преобразовать?

Изображение: original

Результат: result

ПРИМЕЧАНИЕ. Исходное изображение имеет полупрозрачное свечение, результат имеет сплошное зеленое "свечение"

Ответ 1

Эта проблема была представлена ​​здесь:

https://bitbucket.org/effbot/pil-2009-raclette/issue/8/corrupting-images-in-palette-mode

В марте 2012 года в комментарии говорится, что теперь он исправлен в версии для разработки PIL. Самая последняя выпущенная версия - 1.1.7, поэтому исправление не будет доступно до выхода 1.2. PIL обновляет очень медленно, поэтому не ожидайте, что это скоро выйдет.

Ответ 2

К сожалению, ваше изображение PNG - это тип, который PIL не очень хорошо обрабатывает - палитру изображения с альфа-каналом. Когда вы открываете изображение, альфа выбрасывается, и нет способа вернуть его.

Это отличается от обычной прозрачности палитры, где один индекс палитры используется для обозначения полностью прозрачных пикселей.

Ответ 3

Ваша проблема в том, что вы не предоставляете информацию о том, что PIL должен использовать в качестве источника канала ALPHA.

PIL не будет самостоятельно добавлять прозрачность к вашему изображению.

Какую часть вашего изображения вы хотите быть прозрачным?

Ответ 4

Вы можете использовать scipy.misc.imread:

img = scipy.misc.imread(filename, mode='RGBA')
img = Image.fromarray(img)