我们很清楚什么是图片,无外乎png、jpg等格式的文件,例如这个?
但什么是字符画呢?先看一下官方介绍:
字符画,一种由字母、标点、汉字或其他字符组成的图画。简单的字符画是利用字符的形状代替图画的线条来构成简单的人物、事物等形象,它一般由人工制作而成;复杂的字符画通常利用占用不同数量像素的字符代替图画上不同明暗的点,它一般由程序制作而成。字符画是互联网时代的产物,通常应用于即时聊天中。
简单一句话:就是把图片 png、jpg 等格式转为文本 txt 格式。例如这个
要把图像转换为文本,这其中有一个很大的困难,就是文本没有颜色,所以特别引进了一个概念:文本灰度,就是把不同字母在屏幕上显示的大小排序,得到一张灰度表,用这个灰度表来转换图片,可以达到比较好的效果。
话不多说,还是上代码才是硬道理。
友情提示:如果还未安装PIL,请先安装。在终端运行该命令:pip install Pillow
第一步:先准备一些会使用到的符号
serarr = ['@', '#', '$', '%', '&', '?', '*', 'o', '/', '{', '[', '(', '|', '!', '^', '~', '-', '_', ':', ';', ',', '.', '`', ' ']
第二步:获取图片的宽、高、调整图片灰度;根据条件创建字符
count = len(serarr) # 字符数组的长度def toText(image_file): # 该参数为图片文件 asd = '' # 储存字符串 for h in range(0, image_file.size[1]): # 遍历图片高度的坐标点 for w in range(0, image_file.size[0]): # 遍历图片宽度的坐标点 r, g, b = image_file.getpixel((w, h)) # 获取图片各个坐标点的颜色值 gray = int(r * 0.299 + g * 0.587 + b * 0.114) # 调整图片灰度 asd = asd + serarr[int(gray / (255 / (count - 1)))] # 根据灰度选择字符并进行拼接 asd = asd + '\r\n' # 换行 return asd
完整代码如下:
from PIL import Imageserarr = ['@', '#', '$', '%', '&', '?', '*', 'o', '/', '{', '[', '(', '|', '!', '^', '~', '-', '_', ':', ';', ',', '.', '`', ' ']count = len(serarr)def toText(image_file): asd = '' for h in range(0, image_file.size[1]): for w in range(0, image_file.size[0]): r, g, b = image_file.getpixel((w, h)) gray = int(r * 0.299 + g * 0.587 + b * 0.114) asd = asd + serarr[int(gray / (255 / (count - 1)))] asd = asd + '\r\n' return asdimage_file = Image.open("22.jpg") # 打开图片tmp = open('tmp.txt', 'a') # 打开保存文件,如果没有该文件会自动创建tmp.write(toText(image_file)) # 写入tmp.close()
不到20行的代码就完成个该功能,有没有很简单?!快来试一下吧。下面来欣赏一下我的成果。
PS友情提示:
1、如果运行完发现 txt 文件打开之后不像图片,可缩小字体查看,直到图片显示完全。
2、如果出现类似红点点的内容,可将 txt 自带的检查拼写这个功能取消。