我正在编写代码以使用 ESC * 命令(使用 ESC POS 热敏收据打印机)打印图像。
基本上,我正在尝试为 Dart/Flutter 调整 Python 算法。听起来很简单:打开图像 -> 灰度 -> 反转颜色 -> 转换为黑白 1 位:
im = Image.open(filename)
im = im.convert("L") # Invert: Only works on 'L' images
im = ImageOps.invert(im) # Bits are sent with 0 = white, 1 = black in ESC/POS
print(len(im.tobytes())) # len = 576 (image size: 24*24)
im = im.convert("1") # Pure black and white
print(len(im.tobytes())) # leng = 72 (image size: 24*24)
...
我只有最后一步(1位转换)有问题。
如您所见,Python 代码(Pillow 库)将减少 im.convert("1") 命令后的字节数,这正是我正确生成 ESC/POS 命令所需要的。每个值都在 0 到 255 之间。
如何使用 Dart 实现它?
这是我的代码:
import 'package:image/image.dart';
const String filename = './test_24x24.png';
final Image image = decodeImage(File(filename).readAsBytesSync());
grayscale(image);
invert(image);
源图片:24px * 24px
最后,我在 RGB 模式下有一个包含 (24 * 24 * 3) 字节的灰色/反转图像。由于灰度,所有的 r/g/b 值都是相等的,所以我只能保留一个给我 (24 * 24) 字节的通道。
如何实现最后一步im.convert("1")并仅保留 24 * 3 字节?
UYOU
相关分类