zoukankan      html  css  js  c++  java
  • 50 行 Python 代码完成图片转字符

    首先要说的是这个程序很鸡肋,用的图片最好是抠过图的,就是有一块背景是透明的,不然连对齐都是问题

    参考教程:https://www.shiyanlou.com/courses/370/learning/?id=1191

    from PIL import Image
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('file')
    parser.add_argument('-o', '--output')
    parser.add_argument('-w', '--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;:,"^`'. ")
    
    def get_char(r, g, b, alpha = 256):
        if alpha == 0:
            return ' '
        length = len(ascii_char)
        grey = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
        index = int((grey / 256) * length)
        return ascii_char[index]
    
    if __name__ == '__main__':
        im = Image.open(IMG)
        im = im.resize((WIDTH, HEIGHT))
    
        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)
    View Code

    一杠是缩写,两杠是全称,但对应的保存变量是一样的,必要参数不用写选项

    获取变量的方法是直接使用横杠后面的作为成员变量名

    学习一下argparse包的用法:

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('file')
    parser.add_argument('-o', '--output')
    parser.add_argument('-w', '--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 

    另外一个值得学习的是:

    getpixel先横坐标后纵坐标,返回的是一个元组,*这里是解元组,解出来的四个元素作为get_char的参数

    实验结果:

    可以看到提供的就是抠过的图层:

  • 相关阅读:
    BZOJ1999或洛谷1099&BZOJ2282或洛谷2491 树网的核&[SDOI2011]消防
    BZOJ1912或洛谷3629 [APIO2010]巡逻
    CH6202 黑暗城堡
    POJ2728 Desert King
    JoyOI1391 走廊泼水节
    洛谷1073 最优贸易
    POJ3662或洛谷1948 Telephone Lines
    BZOJ1106 [POI2007]立方体大作战tet
    ubuntu 16.04 安装genymotion
    ubuntu下搭建android开发环境核心篇安装AndroidStudio、sdk、jdk
  • 原文地址:https://www.cnblogs.com/exciting/p/11116843.html
Copyright © 2011-2022 走看看