您的位置:首页 > 编程语言 > Python开发

将普通图片转化为字符画(Python)

2016-05-20 22:09 483 查看

1.设计思路

如何把以.png的图片以不同字符把它形象的画出来呢?

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

2.需做的准备

为了实现我们本片博文所述的功能,不许得有一个叫做Pillow(PIL)的图像处理库

该库的安装方式如下

pip install pillow


我们今天所要使用的是该库中的Image模块.。其中会用到一个很重要的概念-灰度值(由图形颜色的深浅来决定)

关于Image模块的详细用法请戳http://www.cnblogs.com/apexchu/p/4231041.html

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()


运行上述脚本

python prog3.py --width 45 --heigth 45 ascii_dora.png


选材的图片原图如下



效果图如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 图像处理