齐鲁热线主页 > 商讯 > 正文 >

这辈子不想打工?先给你打个码(附python源码)

时间:2020-04-21 10:57:35 来源:互联网 阅读:-

文/IT可达鸭

图/IT可达鸭、网络

前言

一段来自网络的话:

打工? 这辈子都不可能打工的。 做生意又不会做、 只能靠偷电瓶车维持这种生活!

据说,发表该言论的“网红”最近刑满出狱,各大网红公司“三顾茅庐”请他出山.....

为何会盛行这种不好的风气?作为一名码农,给大伙分享一段代码,给他打个码。

这次分享一个图片转字符画的一个源码,需要有图像的一些基本知识。

  • 环境配置

python版本: 3.6.0

代码编辑工具:pycharm

文本编辑工具:Notepad++

项目所需要的环境安装包

pip install pillow


第一步:导入相关的python包

# 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 个字符,字符的种类与数量可以自己根据字符画的效果反复调试,

这辈子不想打工?先给你打个码(附python源码)


第二步:灰度映射

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

再利用一个不重复的字符列表,灰度值小(暗)的用列表开头的符号(在上定义的一个全局变量),灰度值大(亮)的用列表末尾的符号。

这辈子不想打工?先给你打个码(附python源码)


第三步:图片转化

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

通过双重循环对每个像素点值进行转化,转化为指定的字符。

这辈子不想打工?先给你打个码(附python源码)

第四步: 保存结果

def save_txt(filename, content):
   """保存txt"""
   with open(filename, 'w', encoding='utf-8') as wf:
       wf.write(content)

这是保存txt文本的写法,是不是很简洁。利用with关键词,省去了close()函数的调用,使得代码更加精简。

这辈子不想打工?先给你打个码(附python源码)

第五步: 主函数

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)

这辈子不想打工?先给你打个码(附python源码)


输入输出


这辈子不想打工?先给你打个码(附python源码)


这辈子不想打工?先给你打个码(附python源码)


结语:

其实,整个源码看下来,没有难度,可以说非常简单。是的,有难度的代码,其实都是由一块又一块简单的代码构成。老老实实敲代码,还是不要跟风学习负面网红,生活应该来点正能量。


推荐阅读:eos200d

(正文已结束)

免责声明及提醒:此文内容为本网所转载企业宣传资讯,该相关信息仅为宣传及传递更多信息之目的,不代表本网站观点,文章真实性请浏览者慎重核实!任何投资加盟均有风险,提醒广大民众投资需谨慎!