avatar

目录
Python图片转字符画

前言

最近对字符画感兴趣,这次我们来用Python来将图片转化为字符画!

环境

系统:Ubuntu
语言:Python 2.7

编写代码

首先,为了便于后期的管理,我们先新建一个pycode文件夹

在终端输入:$mkdir pycode

然后进入pycode文件夹

在终端输入:$cd pycode

  • 安装pillow(PIL)库

$sudo pip install pillow

  • 获取图片

$wget http://pic.nipic.com/2007-07-27/200772784946209_2.jpg

代码为$wget 图片地址

当然,你也可以直接把图片复制在pycode文件夹中,这样就不用从网络上获取图片了。

然后我们来编写代码。

输入:$vim zf.py新建一个python代码,按i,输入下面的代码:

python
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
# coding=utf-8
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
# 字符是比较大块的像素,字符种类越多可以表现的颜色也越多,图片更有层次感.下面字符集使用了70个字符
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 灰度值指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像
# 灰度值公式 = 0.2126 * r + 0.7152 * g + 0.0722 * b
# RGB转字符
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 输入字符画文件名

然后你会看到如下的效果:

原图:

字符画:

文章作者: 大巴斯基
文章链接: http://nieblog.me/2017/12/22/Python图片转字符画/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CodeTrainer