在用到蓝牙打印机的时候,需要将图片转为字符串图,才能输出到打印机上。开始用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')