网上看的实验楼的教程,自己理解了一下。可还是觉得不好,因为不能复制,太傻了敲。就在自己电脑上运行。结果发现居然还要在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 += '\n'
    print(txt)
    if OUTPUT:
        with open(OUTPUT,'w') as f:    
            f.write(txt)
    else:
        with open(r"C:\Users\HBX\Documents\staudy\output.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:\Users\HBX\Pictures\Camera Roll\dingdan.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 += '\n'
    print(txt)    # 打印测试看下
    with open(r"C:\Users\HBX\Documents\staudy\output.txt",'w') as f:    #输出文件到本地文件夹。
        f.write(txt)