3

在 python 中,我使用以下代码创建 1bpp 图像:

import Image
img = Image.open(filename)
img = img.convert('1')
pix = img.load()

我在这里的 Stack 上找到了这段代码:Can't format BMP image data to 1 bit per pixel in PIL

此代码生成的似乎是单色位图,但是当您在十六进制编辑器中查看数据时,黑色是 FF 是单个像素,而白色 00 是单个白色像素。这意味着数据是 8bpp 而不是 PIL 文档建议的 1bpp ( https://pillow.readthedocs.org/en/3.1.x/handbook/concepts.html?highlight=bit )。我已经确认这是真的,因为当我用 80 (128) 替换 FF (255) 时,图像中会引入灰色。对于真正的单色位图图像,这不会导致任何灰色。

这是因为真正的单色图像是每像素 1 位。这意味着这 2 个字节,例如 AA AA,将产生 16 个像素的黑白棋盘格图案,而在 8bpp 中,它将产生两个灰色像素。

我发现 PIL 的每像素 1 位模式总是会生成灰度。有谁知道另一个库可以帮助我生成真正的 1bpp,或者知道一种有效地将 8bit 转换为 1bit 的方法?

我需要这个的原因是因为我正在尝试创建一个可以存储在激光打印机上的图像。打印机需要 1bpp,因为激光打印机实际上不能打印灰色。它使用抖动使外观呈现灰色。

4

0 回答 0