Python生成字符画

  • A+
所属分类:Python库介绍
摘要这一篇文章介绍使用Python生成字符画的方式. 会给出简单的原理介绍和实现的方式. 最后会给出源代码的链接地址.

简介

这一篇介绍一下使用Python来进行字符画的生成. 这里会介绍一下生成的步骤和生成的代码. 同时会将代码的Github的链接附在最后. 最终的生成的效果会是下面的这个样子.

Python生成字符画

 

生成的方式和原理

这一部分介绍一下生成字符画的原理和代码实现. 同时会给出代码仓库的链接.

 

源代码

Github仓库链接: Python生成字符画

觉得在这里看起来不方便可以在代码仓库中进行查看.

 

实现原理

其实实现的想法很简单, 我们希望将每一个像素点都对应到一个字符串上面. 于是对于每一张图片来说, 我们依次遍历他的像素点, 比如灰度图像是256种灰度, 我们对应到256个字符串上面. 这样就可以实现图像转字符串. 下面是一个流程.

  • 读入图片, 修改图片大小
  • 对每一个像素点进行操作
    • 若是彩色, 则转换为灰度
    • 将灰度值映射为字符串
  • 将最终的结果进行保存

 

代码实现

我们将上面介绍的方法进行代码实现. 我将所有的注释都写在代码中了, 可以直接进行阅读.

  1. from PIL import Image
  2. import fire
  3. ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
  4. # 将256灰度映射到70个字符上-即输入一个像素点,输出一个符号
  5. def get_char(r,g,b,alpha = 256):
  6.     if alpha == 0:
  7.         return ' '
  8.     length = len(ascii_char)
  9.     # 将彩色转换为灰度
  10.     gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
  11.     unit = (256.0 + 1)/length
  12.     return ascii_char[int(gray/unit)]
  13. def image_process(input_file, output_file='res.txt', pic_height=100, pic_weight=100):
  14.     # 加载图片
  15.     im = Image.open(input_file)
  16.     # 调整图片大小
  17.     im = im.resize((pic_weight,pic_height), Image.NEAREST)
  18.     # 保存缩小后的图片
  19.     # im.save('temp.jpg')
  20.     txt = ""
  21.     # 对每个像素点进行操作
  22.     for i in range(pic_height):
  23.         for j in range(pic_weight):
  24.             txt += get_char(*im.getpixel((j,i)))
  25.             txt += '  '
  26.         txt += '\n'
  27.     print(txt)
  28.     #字符画输出到文件
  29.     if output_file:
  30.         with open(output_file,'w') as f:
  31.             f.write(txt)
  32.     else:
  33.         with open("output.txt",'w') as f:
  34.             f.write(txt)
  35. if __name__ == '__main__':
  36.     """
  37.     input_file: 图像的名称
  38.     output_file: 保存文件的名称
  39.     """
  40.     fire.Fire(image_process)

最终在使用的时候, 可以直接在命令行中进行操作.

  1. python char_pic.py ../char_pic/62.jpg

我们再看一个例子的效果, 关于效果的查看, 可以使用文本编辑器进行缩放, 使用Ctrl+-进行缩放.

Python生成字符画

 

一些其他的

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

Python生成字符画
  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: