Генерация изображения в 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). Изображение должно быть черным, но это не так.

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

Изображение сгенерировано подушкой; что-то не так

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()
Другие вопросы по тегам