Python 代码完成图片转字符画小工具
ascii_dora.png 图片:
ascii.py 代码如下
__author__ = 'xiaofan'
# -*- coding:utf-8 -*-
from PIL import Image
import argparse
ascii_char = list("$@B%B&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")
# alpha[0,255] 0:tou ming
def get_char(r,g,b,alpha = 256):
if alpha == 0:
return ' '
length = len(ascii_char)
# rgb[0,255] gray [0,255]
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (256.0 + 1)/length
return ascii_char[ int(gray/unit) ]
def Parser():
parser = argparse.ArgumentParser()
parser.add_argument('file' )
parser.add_argument('-o',type = str,default = 'output.txt')
parser.add_argument('-width',type = int,default=80)
parser.add_argument('-height',type = int,default=40)
args = parser.parse_args()
dict = {'IMG':args.file , 'WIDTH' : args.width,
'HEIGHT':args.height , 'OUTPUT':args.o }
return dict
def ImageToAscii():
dict = Parser()
IMG = str(dict['IMG'])
WIDTH = int( dict['WIDTH'] )
HEIGHT = int( dict['HEIGHT'] )
OUTPUT = str(dict['OUTPUT'])
im = Image.open( IMG )
im = im.resize( (WIDTH ,HEIGHT ) , Image.NEAREST )
txt = ""
for h in range(HEIGHT):
for w in range(WIDTH):
txt += get_char( *im.getpixel( (w,h) ) )
txt += '\n'
print txt
if OUTPUT:
with open(OUTPUT,'w') as f:
f.write(txt)
if __name__ == '__main__':
ImageToAscii()
命令行运行 >python ascii.py ascii_dora.png
结果如下 output.txt:
$WJxxx#l.|Oxz,.|#$
$uxxxxxx#l.....|X.....kxJ$
$$xxxxxxxxxx.....Cf,h.h,h..zxxxB
$Yxxxxxxxxxxxxl...<...hl.....Xn#Lxx$
$xxxxxxxxxxk|..C{......,|#kahf.....|O$
#xxxxxxxxW.|.......CpO,.nk..)kB..l#<.p....$
kxxxxxxx#..........<Cp-...Bkkkh<............
$xxxxxxxX....................|n..............
xxxxxxLC......................X.............$
$xxxxxx<....fakkkkk**W$p$n.....-..........hf$
$xxxxxJ.....*kk*B&akkkkkkkkkkkkh*W%%p&%WM..-
$xxxxx#.....Wkkkkkkkkkkkkkkkkkkkkkkkkkk*...p
$xxxxxp.....{kkkkkkkkkkkkkkkkkkkkkkkkkM...O$
dxxxxd......C%jjjjjjjjjwWkkkkkkkkkkk*....
$xxxxx{......-jjjjjjjjjjjjkkkkkkkk*,....$
$xxxxu#.......hjjjjjjjjjjjxkkkka<.....$
@xxxxx-........Wjjjjjjjjjj&kkh......$
$xxxxxO..........,oCjjjz#l.......B
dxxxxO....{O%M*kB.....kkaWoBakkB
$BJ%hkkk*%#qJJX.......lXwbXbw<X
$aB$uxxxxxxxx,........lllX/l,.$
$xxxxxxxxxxxB.......plllXlh..$
xxxxxxxxxxxW,#{.-h...<---...p
qxxxxuomxzO.-...............n $......-$
$xxxxxxxx#..................|.........,
xxxxxxxxd-..f.............h...........$
$Wka$ mxxxxxxxxO....n|.......X{.-..........l
Wkkkk$#xxxxxxxxxq.............|x...........*
$#kk$ zxxxxxxxxxxxJX.......-kxxx..........n
$xxxxxxxxxxxxxxxxxxxxxxxxxxh........B
$|#xxxxxxxxxxxxxxxxxLB$$ $C...{$
,..nxxxxxxxxxxxxxB$
$....nxxxxxxxxL$
p......ouxxx$
$...........$
B,.........|
$|......|$