首先要说的是这个程序很鸡肋,用的图片最好是抠过图的,就是有一块背景是透明的,不然连对齐都是问题
参考教程:https://www.shiyanlou.com/courses/370/learning/?id=1191
from PIL import Image import argparse parser = argparse.ArgumentParser() parser.add_argument('file') parser.add_argument('-o', '--output') parser.add_argument('-w', '--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;:,"^`'. ") def get_char(r, g, b, alpha = 256): if alpha == 0: return ' ' length = len(ascii_char) grey = int(0.2126 * r + 0.7152 * g + 0.0722 * b) index = int((grey / 256) * length) return ascii_char[index] if __name__ == '__main__': im = Image.open(IMG) im = im.resize((WIDTH, HEIGHT)) txt = "" for i in range(HEIGHT): for j in range(WIDTH): txt += get_char(*im.getpixel((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)
一杠是缩写,两杠是全称,但对应的保存变量是一样的,必要参数不用写选项
获取变量的方法是直接使用横杠后面的作为成员变量名
学习一下argparse包的用法:
import argparse parser = argparse.ArgumentParser() parser.add_argument('file') parser.add_argument('-o', '--output') parser.add_argument('-w', '--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
另外一个值得学习的是:
getpixel先横坐标后纵坐标,返回的是一个元组,*这里是解元组,解出来的四个元素作为get_char的参数
实验结果:
可以看到提供的就是抠过的图层: