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

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

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

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

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

результат: result

Примечание: исходное изображение имеет полупрозрачное свечение, результат имеет сплошное зеленое "свечение"

4 ответов


эта проблема была обнаружена здесь:

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

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


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

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


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

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

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

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

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