Python Pillow не создает истинное 1-битное монохромное изображение

В 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, потому что лазерные принтеры не могут печатать серым цветом. Он использует сглаживание, чтобы сделать изображение серым.


person Gernatch    schedule 31.03.2016    source источник
comment
PIL устарел и не поддерживается. Вместо того, чтобы обходить его особенности, вы можете попробовать более новый форк, pillow.   -  person Ben    schedule 31.03.2016
comment
Я смотрел старую документацию. На самом деле у меня установлена ​​подушка 3.1.1, которую я использую. Спасибо. Извиняюсь.   -  person Gernatch    schedule 31.03.2016
comment
Внесены изменения, чтобы отразить более новую версию   -  person Gernatch    schedule 31.03.2016