• 图片转字符串


    网上看的实验楼的教程,自己理解了一下。可还是觉得不好,因为不能复制,太傻了敲。就在自己电脑上运行。结果发现居然还要在CMD里启动。效果不理想

    决定把它改良一下,太呆滞了,用命令行打开。而且效果和我差的有点远啊。

    有空去网上找下,把它给修改一下。应该挺多的。洗澡去了;

    太不友好了,CMD,就会一个CD和DIR ,最多加个IPCONFIG ,PING 一下。要求不要太高了

    #!/usr/bin/env.python  
    # _*_ coding: utf-8 _*_
    
    from PIL import Image
    import  argparse
    
    parse = argparse.ArgumentParser()
    
    parse.add_argument('file')
    parse.add_argument('-o','--output')
    parse.add_argument('--width',type= int ,default= 80)
    parse.add_argument('--height',type=int ,default= 80)
    
    args = parse.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)
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)   # 将RGB颜色赋值给灰度值,固定公式。灰度值公式将像素的 RGB 值映射到灰度值
        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)))    #im.getpixel(())  返回给定位置的像素值,这一点的RGB,三位数。然后用灰度值显示。
            txt += '
    '
        print(txt)
        if OUTPUT:
            with open(OUTPUT,'w') as f:    
                f.write(txt)
        else:
            with open(r"C:UsersHBXDocumentsstaudyoutput.txt",'w') as f:    #输出文件到本地文件夹。
                f.write(txt)

    稍微改良版本:

    #!/usr/bin/env.python  
    # _*_ coding: utf-8 _*_
    
    
    from PIL import Image
    #稍微改了一下,因为不想用CMD来解析。优化的不是很好。只能说勉强实现了。(其实是原来的图片太小了)
    # 主要是两点,一是获得长宽高,二是把文字赋予色彩。灰度值
    # 原先的方法根据命令行下,获取。它的大小比较合适。用Image,总感觉太大了。发现是原来图片小
    #获取图片的长宽高
    def get_size(file):
        im = Image.open(file)    #调用Image库打开文件 ,赋值im
        WIDTH = im.size[0]       #获取宽,后面加[],猜测的,没想到真有这个
        HEIGHT = im.size[1]      #获取高
        print(WIDTH,HEIGHT)      #测试
        return WIDTH ,HEIGHT     # 返回高,宽
    ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. ")  #70字符串
    # 获得字符串的颜色
    def get_char(r,g,b,alpha = 256):
        if alpha == 0:      #RGB 等于0
            return ' '
        length = len(ascii_char)  #获取字符串长度
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)   # 将RGB颜色赋值给灰度值,固定公式。灰度值公式将像素的 RGB 值映射到灰度值
        unit = (256.0 + 1)/length    #把RGB 256除以字符串长度70,获得一个单位值
        return ascii_char[int(gray/unit)]    #灰度值除以基础单位。转整数。就将一个RGB分为了一个字符。  可以看做数学函数用70字符 个映射 256 RGB.
    
    if __name__== '__main__':
    
        file = r'C:UsersHBXPicturesCamera Rolldingdan.png'   #打开文件
        WIDTH, HEIGHT = get_size(file)           # 获取长宽
        im = Image.open(file)   #调用
        txt = ""
        for i in range(HEIGHT):             #按照高宽循环。打印一张图片,前后无所谓。
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j,i)))    #im.getpixel(())  返回给定位置的像素值,这一点的RGB,三位数。然后用灰度值显示。
            txt += '
    '
        print(txt)    # 打印测试看下
        with open(r"C:UsersHBXDocumentsstaudyoutput.txt",'w') as f:    #输出文件到本地文件夹。
            f.write(txt)
  • 相关阅读:
    python学习
    当时的月亮 王菲
    谈谈写程序与学英语(转载)
    excel 列索引(数字)转列名
    爆款PHP面试题
    关于PDO取得结果集的数据类型为string的问题
    分享几款常用的API/文档浏览器
    php写错命名空间 导致catch不到异常
    iOS图片上传后被旋转的问题
    vi写完文件保存时才发现是readonly😂
  • 原文地址:https://www.cnblogs.com/sakura3/p/8476411.html
Copyright © 2020-2023  润新知