from PIL import Image """ 将图片转换为字符画 图片转字符画是将一张图片转换成由字符组成的图像,通常用于在命令行界面或者文本编辑器中显示。这个过程主要包括以下几个步骤: - 读取图片文件 - 将图片转换为灰度图像 - 调整图片的尺寸以适应字符画的宽度和高度 - 将灰度值映射到字符集上,生成字符画 参考链接: - [Image Module](https://pillow.readthedocs.io/en/stable/reference/Image.html) - https://blog.csdn.net/m0_73511684/article/details/137026540 - https://zhuanlan.zhihu.com/p/687097277 说明: - pip install PIL 安装不了,安装 Pillow,该库与PIL接口兼容,可以满足你的图像处理需求。导入使用 from PIL import Image """ class ASCIIart(object): def __init__(self, file): """ - file图片文件的名字, 传入参数为文件名进行一个赋值方便后续调用, - codelist用于存储字符集,用于替换每像素点的灰度值 - img是PIL库中Image实例出来的对象,调用open方法打开文件file - count用于保存字符集的长度 """ self.file = file self.codelist = """$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. """ self.img = Image.open(file) self.count = len(self.codelist) def get_char(self, r, g, b, alpha=256): """ 用来处理灰度值和字符集的关系 :return: """ if alpha == 0: return " " length = self.count # 获取字符集的长度 gary = 0.2126 * r + 0.7152 * g + 0.0722 * b # 将RGB值转为灰度值 unit = 265 / length return self.codelist[int(gary / unit)] def get_new_img(self): """ 用于处理图片是转换的字符画不至于失真 :return: """ w, h = self.img.size print(f"图片的原始宽度和高度为:{w},{h}") if not w or not h: pass else: if w <= 299 or h <= 299: w = int(w / 1.4) h = int(h / 1.4) if 300 <= w <= 500 or 300 <= h <= 500: w = int(w / 2) h = int(h / 2) if 500 < w < 1000 or 500 < h < 1000: w = int(w / 3.8) h = int(h / 3.8) if 1000 <= w or 1000 <= h: w = int(w / 10) h = int(h / 10) print(f"修改后图片的宽度和高度为:{w},{h}") """ https://pillow.readthedocs.io/en/stable/handbook/concepts.html#filters Image.NEAREST: 低质量 Image.BILINEAR: 双线性 Image.BICUBIC: 三次样条插值 """ im = self.img.resize((w, h), Image.Resampling.LANCZOS) return im def get_str_img(self, im, output=None): """ 获取字符串图片 :return: """ w, h = im.size txt = "" for i in range(h): for j in range(w): txt += self.get_char(*im.getpixel((j, i))) txt += "\n" # 字符画输出到文件 if output: with open(output, "w") as file: file.write(txt) else: with open("output/output3.txt", "w") as file: file.write(txt) if __name__ == '__main__': file = "image/thing.jpg" img = ASCIIart(file) im = img.get_new_img() img.get_str_img(im)
标签:字符,01,Python,self,灰度,file,Image,图片 From: https://www.cnblogs.com/qk1314/p/18209379