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)