python画鸟_菜鸟世界 -使用python制作一张字符画

1、灰度图与字符画

黑白照片大家都不陌生,但黑白照片并不是只有黑白两种颜色,还有介于黑和白之间的颜色,这些颜色色深度从0到255,0是黑色,255是白色,也叫灰度值

制作一张字符画的原理就是先将一张图片转为灰度图,也就是黑白照片的样子,然后呢,根据灰度值的不同,用不同的字符来替换

2、PIL

PIL库可以用来处理图片,接下来需要定义一组字符

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

前面的字符看起来都比较重,后面的都比较弱小,因此重的字符去替换图片中颜色深的地方,后面的字符去替换颜色浅的地方

3、示例代码

# coding=utf-8

from PIL import Image

import click

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

# 将256灰度映射到70个字符上

def get_char(r,g,b,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)]

@click.command()

@click.option('--file')

@click.option('--height', default=60)

@click.option('--width', default=120)

@click.option('--output')

def change(file, height, width, output):

im = Image.open(file)

print height, width

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'

txt = txt.replace('.', ' ')

with open(output, 'w') as f:

f.write(txt)

if __name__ == '__main__':

change()

需要注意 txt = txt.replace('.', ' ')  这句话,你可以不在自己的程序加,我加上是为了让字符画更简洁

找一张实验图片

执行命令

python my_pic_to_txt.py --file=1.jpg --output=1.txt --width=120 --height=40

最终得到的结果如下

`'' ^ ' '' '' ''' ' ' ` ' ' ' ' ` ' '

' &W&WW&&8M '?uULQCn)` tWB8' LB8&&BqI^ ''(?}b&%88|

'nW8WW&&&W&WMm wt '"' ' '(m_/88&W&W&W&&8p ` `kMW&W&&@W_' +wc> ` ` ' ?zm' "}]}?-MWWM%Wd'

'zM&8&&&&&a&%i '' ' l8MW&&&WWWWWb B&WWWWWWWM8&r '` ~}[][]}}c&WW&&&a'

'8&&WWWWWW8 `' ##WWWWW&&8 :M%WMWWWWWB' '`}]]-}}[]?lWW&&&W&`

B&WW&&M#{ "%WWWWWW& u&WWWWWWB~' ~{}[]!_}l<_xh>

#8MMW8W *MM8W&$ '-&8&M#&0 ':[][[}{Z?

8M&&B"` U&MM%' BWW&8Z' `)}][[][}[:

"t#8 "@WU #&&0'` }{}[[]}}]:

`'"i' ' /Bb" uo{ ^: `a ' '' ``' '` +?]}[{?_

q ^x8&$&Wl ' `M888Mc d ^ p#W##x `'f#&8$; >?]?Y

' n WB * ' p;^ 8a"' ') :' 08k'']$ :8" ^%Wf ' 'l

} w& @b`% ' ' b c8 Bo ! f` :&r, " +^ "[+' `B&' >

u k% >' "`8&I W8 ] /' t8 @#!? '!a8% m&' l

q ^ #$" _/ 8&/" '1> ##I' k' 'Ba '] ` 8% )'

f ` m' ' $ ' C' 'x ' " 'xi ' ` `` > ' ^ '

'Q $'' '` l< `X ' q @' ' 'k `0

k ' #b>`u$l' `h` ' b @^ ` ;$ `x '

'~

'c[ ' !Z" L ` lO;

>]{+Y cu}}?` ?zuO" ' '^Ourz

,W#}){{}aI' ^`' '^ lqX[{?)n8&` '' @Wxvnz0< ` ' '' `!qxnunool'

BW]{-&]{[{]+\UkbpppaO/?-}[[[]-M&MM# ' *&W8UunvxxvOC[l^ :;}m0zxnuuUrnYa%

?WU])WM&J}]][}?]}}[]{}}]}}[[[(@&&MW8 ' M&&&&&nnxuuvxxxxuvnxurunnnuu##bnnY&x

YM8b8WWWWb

/&&WWWW&WW)!{]{[[}}[}}}}[}~+WWWWWW&WI `MWWWWW&WWJcxnnnnnnnnnnvxc:1M&M&&WWWW

+&&WWWW&W&$':+1}[}}[}}}}?:I"8WWWWWMW< WWWWWWW&;/vnnnnnnuuxv-i>!c8MW&WWW&

xJ&W&WWWWWW#:I"i]{}]}}>,;:`#MWWWWW&&v '`aW&WWWWWWWZ!>}cvxnxcx+

q,oMM&&WWWW&:;:;;I;:I;:I,`&WWWW&W&M#d ^'8M&&WWW&W#x>!!!!i!i!!l>

a'I$8WWWW&WWU;I;;;;;:;II;h%&&W&Mo&$ o il;8&M#WW#&W8I!ii!>i!!i!!:8WW&WW&MMM]'

''BW^: *#&$:::;;;;;;;I;:CMWW#&W&/: $ }xl>0##&WWWWM>ii!!!!!!ii!lWWWW&&WaC:}+

,l:~p8W&&l":`l[I^;;II;;;;;;;;;;;!88Bh";: B&b ' ' \%W|>l:|88BpIl!ii!!!!!ii>!lXM&W8Wuil;B@ `

W&8#&&WW#cl;II;l:l;;;;;;;;;;;;;;:II;l::"@&&*&BWM$x ' $%8W&WMWWfil>!!>>!!!!!!!!!>;;;">!~lMW&8w! l

BW&WWWWWWMw:!;I;;;;;;;;;;;;;;;I;:;I:I: BWW&&&&&&&Q @&WWWWWW8&>iIii>i!!!!!!!!!!!!!!!!ii!!i>"&W&WWWWWW8l

'-&W&WWWWWW&@":II;;;;;;;;;;;;;;;I;I;I:{&MM&&&&&&%% ` (8WWWWWWWM#{>>>!!!!!!!!!!!!!!!!!!!!>>l>##&WWWWW&&&`

j#WWWWWWWW#@ l":I;;;;;;;;;;;;;;;;;`pWWWWW&&&&+ @8W&WWWWWM*a>!!!!!!!!!!!!!!!!!!!!>iix*WWWWWWWW&&O

'`#W%WWMWW&&WB`l;::IlIllIII;I;;;'&M&W&&&&&W&M$; W8&WWWWWMW&8|>ii!>ii!!!!!!!i!!l>~C&WWWWWW&WWM#\''

'' ]##*obOY\>^ ^+tYCmbaahhhhbbqZx)Co88MWW&&8'' ' ^,|WWWWWWW&WW&801->i!III;;:;IIIl|&WW&&&&WW&&&% ''

' ` `' ' ' ''` '' ' ' ` :\QQn^ ''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值