在用到蓝牙打印机的时候,需要将图片转为字符串图,才能输出到打印机上。开始用java研究了很久不行,后来又开始用py尝试,最后写出来了
效果将图片:
转为:
- from PIL import Image
-
- def img2charTxt(filename, new_wight, txtname):
- """
- 将图片转换为 ASCII 字符画文本的函数
- 参数:
- filename (str):要转换的图片文件名
- new_wight (int):新图像的宽度
- txtname (str):输出的 ASCII 字符画文本文件名
- 返回:
- None
- """
- # 定义 ASCII 字符集
- #ascii_chars = "MNHQ$OC67+>!:-."
- ascii_chars = "E1FC8390"
-
- # 打开图片文件
- img = Image.open(filename)
-
- # 将图片转换为灰度模式并调整大小
- w, h = img.size
- img = img.convert('L').resize((new_wight, int(new_wight * h / w)))
-
- # 获取调整大小后的图片宽度和高度
- w, h = img.size
-
- # 加载图片数据
- data = img.load()
-
- # 创建一个空列表用于存储字符画文本的行
- result = []
-
- # 遍历图片的每个像素
- n = len(ascii_chars) - 1
- for y in range(h):
- # 创建一个空字符串用于存储当前行的字符画文本
- line = ''
- for x in range(w):
- # 根据像素的灰度值获取对应的 ASCII 字符,并添加到当前行的字符串中
- char = ascii_chars[data[x, y] * n // 255]
- line += char
- # 将当前行的字符画文本添加到结果列表中,并添加换行符
- result.append(line + '\n')
-
- # 打开输出的 ASCII 字符画文本文件,写入字符画文本内容
- with open(txtname, 'w') as f:
- f.writelines(result)
-
- # 测试代码
- img2charTxt('/Users/apple/Desktop/临时文件/1.jpg', 100, '/Users/apple/Desktop/临时文件/1.txt')