将一张图片用字符表示。
效果图:
包结构
第一个是 py 文件,第二个是想要转换成字符的图片,第三个输出字符的文档。
导包
1 | from PIL import Image |
这两个包前者是 Python 中强大的图片处理工具库,后者是由 optparse 驱动的用来管理命令行参数输入的工具:
1 | This module is an optparse-inspired command-line parsing library that: |
获取输入的参数
1 | #命令行输入参数处理 |
字符集
1 | ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") |
这个字符集合可以自己来定义,一般情况下,越长越多,能表示颜色就越多,图片也就更清晰有层次感。
关于灰度
将一张彩色的照片转换成黑白的,用一定的算法,这里用的计算方式:
1 | gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) |
映射
将灰度一一对应到定义好的字符集中:
1 | def get_char(r,g,b,alpha = 256): |
遍历像素并输出
获取到对应图片,通过 im.getpixel()
方法获取到该图片中每个像素点的色值,再通过之前的灰度映射方法获取到对应的字符,输出到指定的文档中。
1 | if __name__ == '__main__': |
运行
到对应的目录下执行命令行就好了
1 | python ascii.py img.png |
记得要跟上图片的文件名(别的参数可选)
完整代码
1 | #!/usr/bin/env python |