zoukankan      html  css  js  c++  java
  • Python 图像转字符画

    代码

    # -*- coding: utf-8 -*-
    # @Author  : Lan126
    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;:,"^`'. ")
    
    
    # 将灰度映射到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 / length
        return ascii_char[int(gray/unit)]
    
    
    if __name__ == "__main__":
        im = Image.open(IMG)
        im = im.resize((WIDTH, HEIGHT), Image.NEAREST)  # python 参数省略...
    
        txt = ""
    
        for i in range(HEIGHT):
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j, i)))   # pixel value 和 可变参数
            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)
    
    
    

    学到了什么

    pillow库是来处理图像的库
    可以用其中的Image模块来打开一张图片(open函数)并改变其大小(resize)
    对每一块像素进行灰度的映射,总共的灰度值是0~255,映射到字符list上并加到字符串txt上,这里又涉及可变参数的知识
    然后用with操作打开一个文件,这样无论发生什么总能正确关闭一个文件
    2.
    如何查看python相关文档

  • 相关阅读:
    递归
    数据结构与算法-复杂度分析
    'latin-1' codec can't encode characters in position解决字符问题
    redis理解
    spring 嵌套事务问题
    Parameterized testing with any Python test framework
    分布式事务测试考虑点
    python orm / 表与model相互转换
    Python多线程、多进程
    JS运动
  • 原文地址:https://www.cnblogs.com/tclan126/p/8804654.html
Copyright © 2011-2022 走看看