• Python 实例学习1 字符画


    参考实验楼的实验,将一幅画转换成字符画。实验楼的链接:https://www.shiyanlou.com/courses/370。

    基本思路:图片中的每个像素点,都有RGB值,根据RGB值,推算出灰度值。根据自定义的ascii_char这个序列,将像素点转换成字符,这样就能画出字符画了。

    完整的代码如下:

    # coding:utf-8
    
    #  为一张图片生成对应的字符集图片
    
    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=153) # 输出字符画宽
    parser.add_argument('--height', type=int, default=153) # 输出字符画高
    
    # 获取参数
    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, b, g, 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__':
    
        rim = Image.open(IMG)
        im = rim.convert('RGB')  
        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))) #把图片中坐标为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)

    需要学习的几个点:

    1、argparse模块,用来接受参数的输入,测试代码如下:

    import argparse
    
    parser = argparse.ArgumentParser()
    
    parser.add_argument('--width', type=int, default=80)
    parser.add_argument('--height', type=int, default=80)
    
    args = parser.parse_args()
    
    W=args.width
    H=args.height
    
    print W*H

    运行结果:

     

    2.图片处理的模块,可以模仿

  • 相关阅读:
    weblogic 反序列化补丁绕过漏洞的一个批量检测shell脚本(CVE-2017-3248 )
    【转】常用端口服务
    【转】服务器解析漏洞
    针对Web的信息搜集
    Kali Linux安装AWVS漏扫工具
    PowerShell 反弹渗透技巧
    ShellCode 最小化编译优化
    Ansible 自动化学习笔记(精简)
    基于白名单的Payload
    社工工具包 SEToolkit
  • 原文地址:https://www.cnblogs.com/nasduc/p/6474270.html
Copyright © 2020-2023  润新知