zoukankan      html  css  js  c++  java
  • 图片转字符画 【学习ing】

    1、创建ascii.py

    2、

    下面是 ascii.py 的完整代码:

    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__':
    
        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 += '
    '
    
        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 http://labfile.oss.aliyuncs.com/courses/370/ascii_dora.png

    最后,使用刚刚编写的 ascii.py 来将下载的 ascii_dora.png 转换成字符画。

    $ python3 ascii.py ascii_dora.png
    

    然后使用 vim 打开 output.txt 文件:

    $ vim output.txt



    逆风的方向更适合飞翔,不怕千万人阻挡,只怕自己投降!
  • 相关阅读:
    【整理】七大查找算法
    centos GUI界面与命令行的切换
    BogoMIPS与calibrate_delay
    Printk与sched_clock_init的一点分析
    系统启动 之 Linux系统启动概述(2)
    Linux Bootup Time
    系统启动 之 Linux系统启动概述(1)
    如何参与Linux内核开发(转)
    如何开始参与开源项目?
    非编程天才参与开源项目的14种方式(转)
  • 原文地址:https://www.cnblogs.com/jackzz/p/10088144.html
Copyright © 2011-2022 走看看