查看原文
其他

教你用Python将图片转化为字符画!附源代码

点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长

每天早上8点20分, 第一时间与你相约

每日英文

Whatever you are facing today, remember to give yourself some credit for making it this far. You are stronger than you know.

无论你今天要面对什么,既然走到了这一步,就奋 斗下去,给自己一些肯定,你比自己想象中要坚强。


每日掏心话

生活中没有什么可怕的东西,人活一世,感性的同时,总是少不了理性的克制。


来自:小象 | 责编:乐乐

程序员小乐(ID:study_tech)第 629 次推文   图片来自网络


往日回顾:当你收到面试通知后,如何大大提升面试成功率?看这篇文章就对了!



   正文   



1.设计思路

如何把以.png的图片以不同字符把它形象的画出来呢? 我们知道其实一张图片是由很多不同像素点所组成的,每种像素点可以表示一种颜色。那么如果我们用不同的字符来代替各种像素点,是不是就可以将图片转化为字符画了?没错就是要用这个原理。

2.准备工作

为了实现我们本篇博文所述的功能,不需得有一个叫做Pillow(PIL)的图像处理库 
该库的安装方式如下
pip install pillow

3.代码实现

#! /usr/bin/python#coding:utf8
import argparsefrom PIL import Image
def handle_command(): '命令行参数处理' parser = argparse.ArgumentParser() parser.add_argument('filename',help = '图片的路径') parser.add_argument('-o','--output',help = '是否输出文件') parser.add_argument('--width',type = int,default = 80) parser.add_argument('--heigth',type = int,default = 80)
#获取命令行参数 return parser.parse_args()
args = handle_command()
class Ptrancefrom(object): '实现将图片转化为字符' def __init__(self,img,width,heigth): self.img = img self.width = width self.heigth = heigth self.ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
def get_char(self,r,b,g,alpha = 256): '将256范围的灰度值映射到70个字符上' #灰度值为0时对应字符为空格 if alpha == 0: return ' '
length = len(self.ascii_char) #灰度值的计算公式 gray = int(0.2126 *r + 0.7152*g + 0.0722*b)
unit = (256.0 + 1)/length return self.ascii_char[int(gray/unit)]
def print_picture(self): '打印图形' #打开图片 im = Image.open(self.img) #设置图片像素的大小 im = im.resize((self.width,self.heigth),Image.NEAREST)
txt = ""
for i in range(self.heigth): for j in range(self.width): txt += self.get_char(*im.getpixel((j,i))) txt += '\n' print txt
def write_to_file(self): '将生成的字符图片写入到文件' if args.output: with open(args.output,'w') as f: f.write(txt) else: with open('output.txt','w') as f: f.write(txt)pic = Ptrancefrom(args.filename,args.width,args.heigth)pic.print_picture()运行上述脚本
python prog3.py --width 45 --heigth 45 ascii_dora.png选材的图片原图如下 效果图如下 

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。


欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。

猜你还想看


阿里、腾讯、百度、华为、京东最新面试题汇集

关于如何实现一个 TCC 分布式事务框架的一点思考

如何用一句话激怒怒怒怒怒怒怒怒互联网人?

如何让 Mybatis 自动生成代码

为什么 IDEA 比 Eclipse 更好?

如何用几个简单的命令改善你的Linux安全?

关注「程序员小乐」,收看更多精彩内容
嘿,你在看吗?

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存