Генерация изображения в Python с использованием Pillow (PIL)

Я пытаюсь создать полностью черное изображение 100x100 с помощью Python (v2.7.2) и Pillow (v2.4.0), и я получаю очень странный результат.

это мой код

from PIL import Image
im = Image.frombytes('L', (100, 100), bytes([0] * 100 * 100))
im.show()

Это мой результат (увеличено и, пожалуйста, не обращайте внимания на серую рамку - это исходит от OS X Preview). Изображение должно быть черным, но это не так.

Что я делаю не так?

Изображение создано Pillow; что-то не так


person The Gruffalo    schedule 09.04.2014    source источник


Ответы (1)


Результатом bytes([0] * 10) является строка "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]". Таким образом, цвета ваших пикселей представляют собой коды ASCII символов '[', '0', ',', ' ' и ']'.

Чтобы получить байтовую строку из нулевых байтов, используйте вместо этого bytes("\x00" * 100 * 100). Здесь \x00 — это байт с шестнадцатеричным значением 00.

На самом деле вам даже не нужен bytes(...) вызов. bytes — это тип только в Python 3.x. В Python 2.7.x bytes — это просто псевдоним для str.

Итак, окончательный код должен быть:

from PIL import Image
im = Image.frombytes('L', (100, 100), "\x00" * 100 * 100)
im.show()
person citxx    schedule 09.04.2014