Files
V2_micropython/convert_img.py
jeremygan2021 b79d45cf34
All checks were successful
Deploy WebSocket Server / deploy (push) Successful in 18s
t
2026-03-05 21:27:12 +08:00

87 lines
2.6 KiB
Python

import time
from machine import UART
from config import ttl_tx, ttl_rx
from printer_driver import TsplPrinter
def print_bitmap(printer, data, width, height, x_offset=0, y_offset=0, invert=False):
"""
发送位图数据到打印机
:param printer: TsplPrinter 对象
:param data: 位图数据 (bytes), 每一位代表一个像素 (1=print/黑, 0=no print/白)
:param width: 图像宽度 (dots)
:param height: 图像高度 (dots)
:param x_offset: X轴偏移
:param y_offset: Y轴偏移
:param invert: 是否反色打印 (默认False)
"""
if invert:
# 反转每一个字节
data = bytearray([~b & 0xFF for b in data])
width_bytes = (width + 7) // 8
# TSPL BITMAP 指令
# BITMAP x, y, width_bytes, height, mode, data
# mode=0: 正常模式
header = f"BITMAP {x_offset},{y_offset},{width_bytes},{height},0,".encode('utf-8')
printer.uart.write(header)
# 分段发送数据,防止串口缓冲区溢出
chunk_size = 128
for i in range(0, len(data), chunk_size):
printer.uart.write(data[i : i + chunk_size])
# 简单的流控,防止发送太快
time.sleep(0.005)
printer.uart.write(b'\r\n')
def print_raw_image_file(file_path, width, height):
"""
直接打印存储在文件系统中的原始位图数据 (.bin)
该文件应包含预处理好的二进制像素数据 (1 bit per pixel)
:param file_path: 文件路径
:param width: 图片宽度 (dots)
:param height: 图片高度 (dots)
"""
try:
with open(file_path, 'rb') as f:
data = f.read()
except OSError:
print(f"错误: 无法打开文件 {file_path}")
return
# 初始化打印机
uart = UART(1, baudrate=115200, tx=ttl_tx, rx=ttl_rx)
printer = TsplPrinter(uart)
print("=== 开始打印图片 ===")
# 基础设置
printer.cls()
printer.size(48, 30) # 默认 48x30mm
printer.gap(2, 0)
# 计算居中位置 (假设标签纸最大宽度 384 dots, 高度 240 dots)
MAX_WIDTH = 384
MAX_HEIGHT = 240
x_offset = (MAX_WIDTH - width) // 2
y_offset = (MAX_HEIGHT - height) // 2
if x_offset < 0: x_offset = 0
if y_offset < 0: y_offset = 0
print(f"正在发送图片数据 ({len(data)} bytes)...")
print_bitmap(printer, data, width, height, x_offset, y_offset)
# 打印出纸
printer.print_out(1)
print("打印完成")
# 示例用法
if __name__ == "__main__":
# 假设有一个预处理好的 384x240 的二进制文件
# print_raw_image_file("image_data.bin", 384, 240)
pass