文/IT可达鸭
图/IT可达鸭、网络
前言
一段来自网络的话:
打工? 这辈子都不可能打工的。 做生意又不会做、 只能靠偷电瓶车维持这种生活!
据说,发表该言论的“网红”最近刑满出狱,各大网红公司“三顾茅庐”请他出山.....
为何会盛行这种不好的风气?作为一名码农,给大伙分享一段代码,给他打个码。
这次分享一个图片转字符画的一个源码,需要有图像的一些基本知识。
环境配置
python版本: 3.6.0
代码编辑工具:pycharm
文本编辑工具:Notepad++
项目所需要的环境安装包
<code>pip install pillow/<code>
第一步:导入相关的python包
<code># encoding:utf-8 from PIL import Image # 全局变量 ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. ")/<code>
导入PIL包,Python Imaging Library,是Python平台的图像处理标准库。PIL功能非常强大,API也非常简单易用。
定义一个全局变量 ascii_chat, 因为后面代码会不断使用这个变量,所以把它定义为全局变量,方便调用。我们的字符画所使用到的字符集,一共有 70 个字符,字符的种类与数量可以自己根据字符画的效果反复调试,
第二步:灰度映射
<code>def get_char(gray_pix, alpha = 256): """将256灰度映射到指定字符上""" if alpha == 0: return ' ' length = len(ascii_char) return ascii_char[int(gray_pix/((256.0 + 1)/length))]/<code>
灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像
我们可以使用灰度值公式将像素的 RGB 值映射到灰度值:
gray = 0.2126 * r + 0.7152 * g + 0.0722 * b
再利用一个不重复的字符列表,灰度值小(暗)的用列表开头的符号(在上定义的一个全局变量),灰度值大(亮)的用列表末尾的符号。
第三步:图片转化
<code>def transform(img_path): """对图片进行处理""" img = Image.open(img_path) gray_img = img.convert('L') width, height = img.size # 将图片进行缩放,使得最终结果更容易查看 rate = round(300.0 / width, 3) rate2 = round(110.0 / width, 3) width, height = int(width * rate), int(height * rate2) gray_img = gray_img.resize((width, height), Image.ANTIALIAS) # 获取每个像素点对应的字符 code_pic = '' for i in range(height): for j in range(width): code_pic += get_char(gray_img.getpixel((j, i))) code_pic += '\r\n' return code_pi/<code>
img.convert('L'), 就是把RGB彩色图片转为灰度图片(利用上面的灰度公式)。为了展示方便,这里把图片进行缩放,缩放比例为 rate。
通过双重循环对每个像素点值进行转化,转化为指定的字符。
第四步: 保存结果
<code>def save_txt(filename, content): """保存txt""" with open(filename, 'w', encoding='utf-8') as wf: wf.write(content)/<code>
这是保存txt文本的写法,是不是很简洁。利用with关键词,省去了close()函数的调用,使得代码更加精简。
第五步: 主函数
<code>if __name__ == '__main__': img_path = 'timg.jpg' txt_path = 'time.txt' code_pic = transform(img_path) save_txt(txt_path, code_pic) print(code_pic)/<code>
输入输出
结语:
其实,整个源码看下来,没有难度,可以说非常简单。是的,有难度的代码,其实都是由一块又一块简单的代码构成。老老实实敲代码,还是不要跟风学习负面网红,生活应该来点正能量。
如果有疑问想获取源码,可以关注后,在后台私信我,回复:python代码图片。 我把源码发你。持续关注"IT可达鸭" ,每天分享有趣Python源码。最后,感谢大家的阅读,祝大家工作生活愉快!