文/IT可达鸭
图/IT可达鸭、网络
一段来自网络的话:
打工? 这辈子都不可能打工的。 做生意又不会做、 只能靠偷电瓶车维持这种生活!
据说,发表该言论的“网红”最近刑满出狱,各大网红公司“三顾茅庐”请他出山.....
为何会盛行这种不好的风气?作为一名码农,给大伙分享一段代码,给他打个码。
这次分享一个图片转字符画的一个源码,需要有图像的一些基本知识。
python版本: 3.6.0
代码编辑工具:pycharm
文本编辑工具:Notepad++
项目所需要的环境安装包
pip install pillow
# encoding:utf-8
from PIL import Image
# 全局变量
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
导入PIL包,Python Imaging Library,是Python平台的图像处理标准库。PIL功能非常强大,API也非常简单易用。
定义一个全局变量 ascii_chat, 因为后面代码会不断使用这个变量,所以把它定义为全局变量,方便调用。我们的字符画所使用到的字符集,一共有 70 个字符,字符的种类与数量可以自己根据字符画的效果反复调试,
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))]
灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像
我们可以使用灰度值公式将像素的 RGB 值映射到灰度值:
gray = 0.2126 * r + 0.7152 * g + 0.0722 * b
再利用一个不重复的字符列表,灰度值小(暗)的用列表开头的符号(在上定义的一个全局变量),灰度值大(亮)的用列表末尾的符号。
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
img.convert('L'), 就是把RGB彩色图片转为灰度图片(利用上面的灰度公式)。为了展示方便,这里把图片进行缩放,缩放比例为 rate。
通过双重循环对每个像素点值进行转化,转化为指定的字符。
def save_txt(filename, content):
"""保存txt"""
with open(filename, 'w', encoding='utf-8') as wf:
wf.write(content)
这是保存txt文本的写法,是不是很简洁。利用with关键词,省去了close()函数的调用,使得代码更加精简。
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)
其实,整个源码看下来,没有难度,可以说非常简单。是的,有难度的代码,其实都是由一块又一块简单的代码构成。老老实实敲代码,还是不要跟风学习负面网红,生活应该来点正能量。
推荐阅读:eos200d
(正文已结束)
免责声明及提醒:此文内容为本网所转载企业宣传资讯,该相关信息仅为宣传及传递更多信息之目的,不代表本网站观点,文章真实性请浏览者慎重核实!任何投资加盟均有风险,提醒广大民众投资需谨慎!