网上看的实验楼的教程,自己理解了一下。可还是觉得不好,因为不能复制,太傻了敲。就在自己电脑上运行。结果发现居然还要在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)