今天看见一个很有意思的脚本,用py实现把一副图片转换成字符画

Code:

usage:python pic2str.py xxx.jpg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# coding:utf-8  

# 为一张图片生成对应的字符集图片

import Image
import argparse

# 命令行输入参数处理
parser = argparse.ArgumentParser()

parser.add_argument('file') # 输入文件
parser.add_argument('-o', '--output') # 输出文件
parser.add_argument('--width', type=int, default=140) # 输出字符画宽
parser.add_argument('--height', type=int, default=90) # 输出字符画高

# 获取参数
args = parser.parse_args()

IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")


# 将256灰度映射到70个字符上
def get_char(r, b, g, alpha=256):
if alpha == 0:
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)

unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)]

if __name__ == '__main__':

im = Image.open(IMG)
im = im.resize((WIDTH, HEIGHT), Image.NEAREST)

txt = ""

for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j, i)))
txt += '\n'

print txt

# 字符画输出到文件
if OUTPUT:
with open(OUTPUT,'w') as f:
f.write(txt)
else:
with open("output.txt", 'w') as f:
f.write(txt)

试着转换了下头像233

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
                                                $                   .     '                                                   
. $ @ @
^$` $$ B ^ .^ $ @ .
.$" <$ @ @ $ $ $ `
$ $@' ..$ $ '$ .$ $ '@ # $
$'. $ $B' $$. $ @ .$ $. $ $ $
$ '$' @@$^ 8` ` $' @ ^ ^ $ $
$$.'$@.. .$$ ^@ .8 ` $. $ B $ @ $ '
8$. $ ' $$^ '$ $ $ .$ B $ @ $ $
@. $. @$ '% $^ $@. $. .% $ @' @ $ B.
$$ $ `$ '`$ $$ $' $ . 'B $ @. $ ' .
$$ $$` B @ `$" $> ^B. '$' $. $ ' $ $`
.$% $% "$" $ $ $B $ @$ B B B . $ '
^'%$ $$ `$ $ $. @@ $@ . $ `$. "$ .$ .$ $ $
$$$B @'`$@ h @` @. $ ` 'B $B $ $ $ : $ .$.
$@ '$.`$$ .` $' B$ $.@ $ @ $. % @ ' $ $ $"
.W$'....... ^ $% $$ B $^ .$$ 8$ .$% '$` `^ $ . $ @ ^$
. .... . @$B$$$ .% '$@ $B' % $.^ $ .$$$ $$B $$M $`. $ : B :$ .$ $' '$.
.. ''@$ $ .$$ `@@ '.$$$. .B$@ ' B@ !$ `$$' $ $$ .$ $ $ $ $ <B $.
` B$$ .$ @@@ $B . $$ ' $' $ '$ $ $$ @. $ $ '$ @` '
$$$B 8B@ @$ $B $@ $$ $B $@ @ @L $ $ @ .$. .$ $ $
$@$$ @$$ $$@ $ '$ r. $& $Y $ $ .$$ $@$ ,$ ; BZ $ .@
$@$B@ . $B$B ' `..' $$$ $` ^$ $q '@ $ $ @` B. .@ $ $^ . $$' $^ $ $`
' k$$W$$B. $$ `B` $@. $ $$ $W $B $$ $ $ $ @ $$@ `$ $ '8 $" '.
m$;B$ ^ $Bm` $' $ $% '$ $$ $ $$ % $" $ @& $@ . @ .$B^ '$. 'B ..
" . B$@ $$. $B.'$`' $$$ $B. .' $' $* $c Q$ '$ $` $$. $ .$$ ' . ' $` .@
,$$$@$$@$$w$$$$$@$$$$^ ' $$ $$ $@' @ 8 %U'@ `^ $M $$ $$ $B $ 88^ . @Q '$ ^Bm Bp ..$
$@$$$$ ^BB`. ` $.'$ @ $B ' ' . .@'"$+ $'.$$ .$ @` .@ $. $. @$ `$
``.$@%$$ $$ $ $ @. ' $' ` C $ .t .$' $@ $$' $@` '$$ $$ $ `B.
@ $$$$$$$$$.` . $$$ @)%.`@ $@ '. ' ' }'$$$ @@@$%$$$$$ @ $ ' " B$. $ $B "BB $%
$%$$$$ $$ $$@' ' $.$% $ 'a "$$$$'$ @@%$$Y1 $$$$@ $_$$@$ -' .` $B '.$$' .$$ . $$ $$. .B
"8$& '^ $$ ...$$ .^$$`$W$%$B$o$$$$$$'$$$$$$@$$$$B1^<$' ' 'l$` $: $$$ $@' $$. $ .
' $%$ . ^<$@$B@ u$$$$$$$$$$$$$$$$$$$$$$$$$$$$'r$1$ "` ` .' $B$ $ $ " C$.
' @$' $'UZ$B$$$$$$$$$$$$$v $$$$$$$$$$$$$$@$dB$$$@j b .$ '" $$$' B$ '$$
@Y$$$$$$$$$$$$$$$$$$$ @$$$$$$$$$$$$$$$$$$$@$rB$z . . $. ' $$ ''@$
$$$$$$$$$$$$$$$$$$$$$M$$$$$$$$$$$$$$$@$$$1 B$&hB$`.' 'B. .$$ @$'
@$$$$$$$$$$$$$$$$$$$$$L$$$$$$$$$$$$$$$tU$M8bM$1@&$bX$$ Zu '$@$ %$$ .
'$$$$$$$$$$$$$$$$$$$$$$@]$$$$$$$$$$$$$$$qcz#0IBj;M t$^~$ $ ` Y$q$ $'
$$$$$$$$$$$$$$$$$$$$$$c $@$%%$8B%$@%$$$$$1%[].v)<+x'bB a d]' ' $$@f . @$"
$$$$$$$$$$$$$$$$$ .. ' .I};czf')O0$$$@$j$a.$u #.uhu W| . ^M $$ @$
.$$$$$$$$$$$$$$$$WY ('. QuJa$@W@$$@{@b~B$$$Q*$+q.'J\]c`-$ -. ' ^ $$` .
'$$$$$$$$$$$$$$$$$ `' '$d$$$@$$$]$$$ $$$"$@({%@@aC`:w~$`}$ `'U #%$B$$$$&B$^ `'$@$
B$$$$$$$$$$$$$$B$h ' 8$$B'&W$ $$ .b$$$$$B@$$@`$,:%u'$+'Cm~ +z @+`{ ." $@@
$$$$$$$$%$$$.$$B . 'x$$$$l$$$$$$B$$8 $$$$$$$$$$-q-k,.B~n -' x. .`$$$ ''
B$$$&$$$ @@ 'r. `B1$$Z$#@$$$$$$%$$$.8$$@U@$$$$Cq( .,` . .$ ` |;$ $$$$@ $@$$
,8$$$ B$$. $ .&0q$$$$$$$$$$$$$$$8@$ $$~$@$$$$@.w. '''.." '^` ' $$ ^
$$ '. '$$$$w'Ou$@B$@$$$$$$$$$$$$$$f@$$B$$$Q$%$$.r " '}^>uxB`
$}$$$k. $BB$$..X'j$X$@$$$$$$$$$$$B$$XB$$$$$Z]#M$1n'`^. _}.bX ^}X'@$$$$ "B
'$$$$$$$$$$- B$$@ . h].Q:-'"$Z$@@$$$$o $@@$%wj$\0$$$>a':.'+> . $q+%$$$$$$$$@$$$$$@ l
$$$$$$B `$_ .@$$$$ .....f($Uo$fB\ .v$$@ ' @ $B$$$$$r. /]'. ` !.n?b$$`` .
$$$$$ B .$$$$@$ r '.x0 1 $w .@iB$\$J@$$$$b|..I@ r' .'B '. .$@$$$.. .
$$$$@$$$$B@$$$. $^$$$$$ Y' .8 @$$ B$@$$z\8@B$$Zp0< x ^ I$ [~ %$@$ .
$$$$@@'X 8q$$$$$$@@B$$$$$ ...' $$$$$$@$m%` ^;'oBBQp.lC. U"_^^ '# . Y@` $$@$ '..
$$$$$^. 'c%$$$' $$@$@`' @$$@$ ... ^ $$$$$$$?t$$.$c}t< . ~_ ~ ]$o $B$8 .
. .$$$$$$ .$ b} < q .x$@$$ $B$.$$ $$$$@ $vB)cW'.$uzU*1.. `' $ ., B$$
8$$$$$$$$$ .o$$ '+. . '{$ > $B $$ . . `@ @Bk'B$.hf$$$QWj] !. (`^. . '$$ .$@ .
$$%$$$\$B@ @@@: $ Xv@ '$$vb$ `$$Y$@$$$zf.)Q].I/Z . c' _: . @$o '$$
.$$$@$$'$B^@$$$@@ .$@$B.$ $ $*$j@$$@Q$.%'$@$(&Ji$&:` ^ur' 0`k ' ^ $B. '$$
_. $8$$[$B '$@ $ $$$$$`$ $$ .B$$$$B.@f {w$$ ` .> .>..+p`\'n .@Q. 8@ ` $$' '$$'
$p$$.$Z ^$M8$.$$$$$a0.$$ %$$$@%@$$.$ $ %. @ $@' . '. 0kvqjr8.?$ w' >$$ $$$
8$ $^ $$@ $ . $$ $$ $.$$ $$$$$$$(' $ . @$$_.. ^ j0$ '^o{$'I$ \ ''$. '$$$.
$%@$$$%< $$Z "$$$'$@$ $ 8$$$$$'l $@$u`Lp$ '. $ $` $. .$B . $B
$$`$$@$$$ .$$. $$ `$$ '$$$$$f.$$ " &@ `$ $B @ $$ . $"
$$ $$ $$ $' '$ ' $' $$$$$?+q$ . $ Y $ .@$' `"$@
$ $ .$$ $. '@ $B$$$h.$%. . $ .B 'B ' Z$.
$ @ @# $$$$$<XL@ $$ B^ 'BB $.
$ $` .. $B$$$.n$$ .o@^ ` ' '@ .
$. $''$$$$$$$$$$B $, $ $ ` .
.@$$@BB$$$$$i B$. $ $ .
' $$@$ $ $$$$`$$ @. '$.
@ $@B$$ @ @$$: $$ 8 .$ $
$B . .$$ .$%$z$$Y$.$. `$. .$ '
@ $ $$B %$ $$$$@ $` '
$. @$_"$ .$.$@$$$C%. .$
Z$@ $@@ $$$8 n$$<W$. .
$$$$@% $$@$"@h$$&0}&$
:$,$$$$$ @.$@r$]8$B/.$'
8 $$ $$8$k@'@ B'x .
*. @$$$@B$@x'Q ZB
$$$Y@$${B. .]$
$ $$' .$
$$.
@


2017-09-05
Contents

⬆︎TOP