int转化为list python_教你用Python将图片转化为字符画,有源代码

1.设计思路

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

2.准备工作

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

3.代码实现

#! /usr/bin/python#coding:utf8import argparsefrom PIL import Imagedef 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 txtdef 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
选材的图片原图如下  6a68b1047110769a0ba25ed00b3a7fe8.png 效果图如下  84aa2a94ef5c2ac324c0638fb6a7a97c.png

-END-

全新打卡学习模式每天30分钟30天学会Python编程

4dc7acd9c22360a936d11376d8b1f4c7.png

世界正在奖励坚持学习的人!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值