前言
最近对字符画感兴趣,这次我们来用Python来将图片转化为字符画!
环境
系统:Ubuntu
语言:Python 2.7
编写代码
首先,为了便于后期的管理,我们先新建一个pycode文件夹,
在终端输入:$mkdir pycode
然后进入pycode文件夹,
在终端输入:$cd pycode
$sudo pip install pillow
$wget http://pic.nipic.com/2007-07-27/200772784946209_2.jpg
代码为$wget 图片地址
当然,你也可以直接把图片复制在pycode文件夹中,这样就不用从网络上获取图片了。
然后我们来编写代码。
输入:$vim zf.py新建一个python代码,按i,输入下面的代码:
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
| from PIL import Image import argparse parser = argparse.ArgumentParser() parser.add_argument('file') parser.add_argument('-o', '--output') parser.add_argument('--width', type=int, default=80) parser.add_argument('--height', type=int, default=80) 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;:,\"^`'. ") def RGB2Char(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__': img = Image.open(IMG) img = img.resize((WIDTH, HEIGHT), Image.NEAREST) txt = "" for i in range(HEIGHT): for j in range(WIDTH): txt += RGB2Char(*img.getpixel((j, i))) txt += '\n' print txt if OUTPUT: with open(OUTPUT, 'w') as f: f.write(txt)
|
输入完成后,按esc,然后再输入:wq回车保存文件。

输入:$python zf.py 200772784946209_2.jpg -o test.txt
代码格式:$python 代码文件名 图片文件名 -o 输入字符画文件名
然后你会看到如下的效果:
原图:

字符画:
