Loading

图片转字符画

  • 环境搭建
sudo apt-get install python3-pip

使用命令在linux安装pip工具,之后就可以使用pip工具安装python对应的包

sudo pip3 install pillow

使用该方法安装pillow包(用于图像处理的包)

使用如下公式可以将RGB值转换为灰度值

gray = 0.2126 * r + 0.7152 * g + 0.0722 * b

创建一个不重复的字符列表,灰度值小(暗)的用列表开头的符号,灰度值大(亮)的用列表末尾的符号

这样就形成了一个RGB到灰度到字符的映射

  • 在linux创建文件
cd ./Lee
touch ascii.py
vim ascii.py

使用cd更改目录,点号表示当前目录

使用touch在该目录创建文件

使用vim打开该文件

  • 具体实现

argparse是专门用于处理命令行输入的模块,此处为parser这个实例定义了四个参数

from PIL import Image
import argparse

#命令行输入参数处理
parser = argparse.ArgumentParser()
parser.add_argument('file')     #输入文件
parser.add_argument('-o', '--output')   #输出文件
parser.add_argument('--width', type = int, default = 80) #输出字符画宽
parser.add_argument('--height', type = int, default = 80) #输出字符画高

#获取参数
args = parser.parse_args()
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output

定义了一个函数用于完成映射

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)]

 if __name__ == '__main__': 代码块表示如果 ascii.py 被当作 python 模块 import 的时候,这部分代码不会被执行)

首先使用 PIL 的 Image.open 打开图片文件,获得对象 im

使用 PIL 库的 im.resize() 调整图片大小对应到输出的字符画的宽度和高度,注意这个函数第二个参数使用 Image.NEAREST,表示输出低质量的图片。

遍历提取图片中每行的像素的 RGB 值,调用 getchar 转成对应的字符

将所有的像素对应的字符拼接在一起成为一个字符串 txt

打印输出字符串 txt(txt就是显示出来的图片)

如果执行时配置了输出文件,将打开文件将 txt 输出到文件,如果没有,则默认输出到 output.txt 文件

if __name__ == '__main__':

    im = Image.open(IMG)
    im = im.resize((WIDTH,HEIGHT), Image.NEAREST)

    txt = ""

    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt += get_char(*im.getpixel((j,i)))
        txt += '\n'

    print(txt)

    #字符画输出到文件
    if OUTPUT:
        with open(OUTPUT,'w') as f:
            f.write(txt)
    else:
        with open("output.txt",'w') as f:
            f.write(txt)
  • 运行程序
wget https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png

使用wget  图片网址来获取文件,并下载到当前的工作目录

python3 ascii.py ascii_dora.png

格式为解释器  python文件  外部调用文件

 

posted @ 2020-10-26 22:01  lixin2020  阅读(488)  评论(0)    收藏  举报