转自:https://blog.csdn.net/mm1030533738/article/details/78447714
项目链接: https://www.shiyanlou.com/courses/370/labs/1191/document
from PIL import Image #从PIL模块中引入Image这个类
import argparse #引入argparse这个模块(argparse库是用来管理命令行参数输入的)
parser = argparse.ArgumentParser() #创建一个解析对象
parser.add_argument('file') #添加命令行参数和或选项:输入文件
parser.add_argument('-o','--output') #输出文件
parser.add_argument('--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的列表,让图片上的灰度与字符相对应
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!1I;:,\"^`'.")
#将256灰度映射到70个字符上
def get_char(r,g,b,alpha = 256): #这个调用跟im.getpixel函数有关,这个函数是根据图片的横纵坐标,把图片解析成
#r,g,b,alpha(灰度)
if alpha == 0: #如果灰度是0,则说明这里没有图片
return ' '
length = len(ascii_char) #计算这些字符的长度
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) #把这些图片的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))) #把图片按照横纵坐标解析成RGBAlpha这几个参数,然后调用get_char
#函数,把对应的图片转换成灰度值,把对应值的字符存入txt中
txt += '\n'
print(txt) #在界面打印txt文件
if OUTPUT:
with open(OUTPUT,'w') as f: #文件输出
f.write(txt)
else:
with open("xx.txt",'w') as f: #文件输出
f.write(txt)