# python ASCII Generator **Repository Path**: wangyufu/python-ASCII-Generator ## Basic Information - **Project Name**: python ASCII Generator - **Description**: Python 图片转字符画 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-06-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #python ASCII Generator 安装 pillow(PIL)库 导入必要的库 ``` from PIL import Image import argparse ``` 一张图片从图像到字符不是一蹴而就的,需要经过很多步骤,光看着可能没什么头绪,先从成品上着手,成品是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色(暂且这么理解吧),字符的种类越多,可以表现的颜色也越多,图片也会更有层次感,下面是我们选择的字符集。 ``` ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") ``` 没有自己用手去数吧?告诉你,一共有 70 个字符,当然也不是字符越多越好,具体还得看选择的图片,自己反复尝试效果。 问题来了,我们是要转换一张彩色的图片,这么这么多的颜色,要怎么对应到字符上去?这里就要介绍灰度值的概念了。 灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像 这样就好办了,灰度值大的用列表开头的符号,灰度值小的用列表末尾的符号。 灰度值公式 灰度值 = 0.2126 * r + 0.7152 * g + 0.0722 * b 先完成RGB值转字符的函数: ``` ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") def get_char(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)] ``` argparse是一个管理命令行参数输入的小工具,它的使用可以参考这篇教程:http://blog.ixxoo.me/argparse.html 运行代码查看效果吧 ``` $ python ascii.py ascii_dora.png ```