教你用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.

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

每日掏心话

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


来自:小象 | 责编:乐乐

640?wx_fmt=jpeg

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

   正文   

1.设计思路

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

2.准备工作

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

3.代码实现

#! /usr/bin/python	
#coding:utf8	

	
import argparse	
from 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()
运行上述脚本
 
                                                  
选材的图片原图如下 
640?wx_fmt=png
效果图如下 
640?wx_fmt=png

640?wx_fmt=png

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

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

猜你还想看

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

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

如何让 Mybatis 自动生成代码

为什么 IDEA 比 Eclipse 更好?

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

嘿,你在看吗640?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值