我知乎上看到 怎么用 Python 把图片转化为字符? 挺有趣的,自己也尝试了一下,当然他也是参考 这里

原理就是:将图片(位图)转化成灰度图,即 0~255 的数值,然后将这些数值换成特殊符号(自定义)

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
# imageToChar.py 使用说明:
# 把图片(例如xx.png)和这个文件放在同一文件夹中
# 命令行进入上面的文件夹路径输入
# py imageTochar.py xx.png (自选宽度:78,可不填)

from PIL import Image
chars = ['z', 'l', 'y', '#', '?', '*', '+', ';', ':', ',', '.']

def resize(image, newW):
(w, h) = image.size
# 0.58 大致是单个字符在DOS界面的宽高比
newDim = (newW, int(0.58*h*newW/w))
newImg = image.resize(newDim)
return newImg

def garytochar(grayImg,newW):
newPix = [];step=256//len(chars) + 1
for i,data in enumerate(grayImg.getdata()):
if(i%newW == 0): newPix.append('\n')
newPix.append(chars[data//step]) #也可以用 data%len(chars)
return ''.join(newPix)

def imagetochar(imgPath, newW = 78):
img = Image.open(imgPath)
newImg = resize(img,newW)
grayImg = newImg.convert('L')
return garytochar(grayImg,newW)

if __name__ == '__main__':
import sys
imgPath, newW, *tmp = sys.argv[1:3]+ [78]
charPix = imagetochar(imgPath,int(newW))
print(charPix)

效果图

原始图片 字符图片
dna049 dna049