- A+
所属分类:Python库介绍
文章目录(Table of Contents)
简介
这一篇介绍一下使用Python来进行字符画的生成. 这里会介绍一下生成的步骤和生成的代码. 同时会将代码的Github的链接附在最后. 最终的生成的效果会是下面的这个样子.

生成的方式和原理
这一部分介绍一下生成字符画的原理和代码实现. 同时会给出代码仓库的链接.
源代码
Github仓库链接: Python生成字符画
觉得在这里看起来不方便可以在代码仓库中进行查看.
实现原理
其实实现的想法很简单, 我们希望将每一个像素点都对应到一个字符串上面. 于是对于每一张图片来说, 我们依次遍历他的像素点, 比如灰度图像是256种灰度, 我们对应到256个字符串上面. 这样就可以实现图像转字符串. 下面是一个流程.
- 读入图片, 修改图片大小
- 对每一个像素点进行操作
- 若是彩色, 则转换为灰度
- 将灰度值映射为字符串
- 在转换为字符串的时候, 因为像素块是正方形的, 字符串是长方形的, 即一般的字母都是长比宽大, 所以我们在实际处理的时候, 会在每个字符后面加上一个空格, 来缓解一下最终输出时候长和宽不对等的情况. 这个也就是对应代码中的, txt += ' '.
- 将最终的结果进行保存
代码实现
我们将上面介绍的方法进行代码实现. 我将所有的注释都写在代码中了, 可以直接进行阅读.
- from PIL import Image
- import fire
- ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
- # 将256灰度映射到70个字符上-即输入一个像素点,输出一个符号
- def get_char(r,g,b,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)]
- def image_process(input_file, output_file='res.txt', pic_height=100, pic_weight=100):
- # 加载图片
- im = Image.open(input_file)
- # 调整图片大小
- im = im.resize((pic_weight,pic_height), Image.NEAREST)
- # 保存缩小后的图片
- # im.save('temp.jpg')
- txt = ""
- # 对每个像素点进行操作
- for i in range(pic_height):
- for j in range(pic_weight):
- txt += get_char(*im.getpixel((j,i)))
- txt += ' '
- txt += '\n'
- print(txt)
- #字符画输出到文件
- if output_file:
- with open(output_file,'w') as f:
- f.write(txt)
- else:
- with open("output.txt",'w') as f:
- f.write(txt)
- if __name__ == '__main__':
- """
- input_file: 图像的名称
- output_file: 保存文件的名称
- """
- fire.Fire(image_process)
最终在使用的时候, 可以直接在命令行中进行操作.
- python char_pic.py ../char_pic/62.jpg
我们再看一个例子的效果, 关于效果的查看, 可以使用文本编辑器进行缩放, 使用Ctrl+-进行缩放.

一些其他的
今天打开bing的时候没打开, 第一次看到这样的错误提示, 很是可爱.

- 微信公众号
- 关注微信公众号
-
- QQ群
- 我们的QQ群号
-
感谢你能看到最后,谢谢对本站的支持!!!
谢谢支持!
记得推荐给大家!
点