В python я использую следующий код для создания изображения 1bpp:
import Image
img = Image.open(filename)
img = img.convert('1')
pix = img.load()
Я нашел этот код в стеке здесь: Не удается отформатировать данные изображения BMP до 1 бита на пиксель в PIL
Этот код создает то, что кажется монохромным растровым изображением, но когда вы смотрите на данные в шестнадцатеричном редакторе, черный — это FF — это один пиксель, а белый 00 — это один белый пиксель. Это означает, что данные имеют формат 8bpp, а не 1bpp, как предлагает документация PIL (https://pillow.readthedocs.org/en/3.1.x/handbook/concepts.html?highlight=bit). Я убедился, что это правда, потому что, когда я заменяю FF (255) на 80 (128), в изображение вводится серый цвет. С настоящим монохромным растровым изображением это не вызвало бы серого цвета.
Это связано с тем, что настоящее монохромное изображение имеет 1 бит на пиксель. Это означает, что эти 2 байта, например, AA AA, будут создавать шахматный черно-белый шаблон из 16 пикселей, а в 8bpp — два серых пикселя.
Я обнаружил, что режим PIL 1 бит на пиксель всегда генерирует оттенки серого. Кто-нибудь знает другую библиотеку, которая может помочь мне сгенерировать настоящий 1bpp, или знает способ эффективного преобразования 8-битного в 1-битный?
Причина, по которой мне это нужно, заключается в том, что я пытаюсь создать изображение, которое можно сохранить на лазерном принтере. Принтер требует 1bpp, потому что лазерные принтеры не могут печатать серым цветом. Он использует сглаживание, чтобы сделать изображение серым.