成都企业建站系统,南京自适应网站,品牌广告语经典100条,专业网站建设找哪家公司首先要明确思路, 图片是由像素组成的, 不同的像素有不同的颜色(rgb), 那么既然我们要转化为字符画, 最直接的办法就是利用字符串来替代像素, 也就是用不同的字符串来代表不同的像素. 另外图片一般来讲是彩色的, 而acsii(一般打印在终端上吧) 都是黑白的, 此时就要介绍另外一个概…首先要明确思路, 图片是由像素组成的, 不同的像素有不同的颜色(rgb), 那么既然我们要转化为字符画, 最直接的办法就是利用字符串来替代像素, 也就是用不同的字符串来代表不同的像素. 另外图片一般来讲是彩色的, 而acsii(一般打印在终端上吧) 都是黑白的, 此时就要介绍另外一个概念了 : 灰度值指黑白图像中点的颜色深度范围一般从0到255白色为255黑色为0故黑白图片也称灰度图像. 到这里思路就很明确了, 我们要做的就是两件事 : 1. 将每一个像素点(彩色图片用rgb)映射到每一个灰度值... 2. 将灰度值映射到每一个字符串... 所以我们还需要从像素点的rgb到灰度值的转换公式 : 灰度值 0.2126 * r 0.7152 * g 0.0722 * b. 代码如下 : 1 from PIL import Image2 3 ascii_chars list($B%8WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~i!lI;:,\^.) #用来替代像素的字符集合...4 5 def get_chars(r, g, b, alpha 256):6 global ascii_chars7 if alpha 0:8 return 9 length len(ascii_chars)
10 gray int(0.2126 * r 0.7152 * g 0.0722 * b)
11 unit alpha / length #将256个像素均分给字符...
12 return ascii_chars[int(gray/unit)]
13
14
15
16 imagePath /Users/zhangzhimin/ascii_dora.png
17 outPutHeight 70
18 outPutWidth 100
19
20
21 img Image.open(imagePath)
22 img img.resize((outPutWidth, outPutHeight))
23
24
25 txt
26 for y in range(outPutHeight):
27 for x in range(outPutWidth):
28 txt get_chars(*img.getpixel((x, y)))
29 txt \n
30
31 print(txt) 效果大概是这样的 : 值得一提的是只对一些层次简单的图形会有很好的效果, 如果想要解析复杂的图片建议增加字符串的个数以及显示屏的大小... 感谢实验楼提供这样一个有趣的编程练习...转载于:https://www.cnblogs.com/nzhl/p/5599346.html