我们之前学过词云能将数据变成图片展示出来,那么今天我们就来看个不同的,将图片变成字符输出。
看个效果图:
文字输出:
那么下面我们来看看代码吧!
importargparse
fromPILimportImage
# 命令行输入参数处理
parser = argparse.ArgumentParser()
# 输入图片
parser.add_argument('file',
help='the input file')
# 输出文件
parser.add_argument('-o','--output',
help='the output text file')
# 输出字符画宽度
parser.add_argument('-w','--width',
type=int,default=40,
help='the width of the output, default is 40')
# 输出字符画高度
parser.add_argument('--height',
type=int,default=40,
help='the height of the output, default is 40')
# 获取参数
args = parser.parse_args()
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
str ="$@B%8&WM#*oahkbdpqw"\
"mZO0QLCJUYXzcvunxrjft/\|()"\
"1{}[]?-_+~i!lI;:,\"^`'. "
ascii_char =list(str)
# 将256 灰度映射到 70 个字符上
defget_char(r,g,b,alpha=256):
ifalpha ==:
return" "
length =len(ascii_char)
gray =int(0.2126*r +0.7152*g +0.0722*b)
# 每个字符对应的 gray 值区间宽度
unit = (256.0+1)/length
# gray值对应到 char_string 中的位置(索引值)
index =int(gray/unit)
returnascii_char[index]
if__name__ =="__main__":
im = Image.open(IMG)
im = im.resize((WIDTH,HEIGHT),Image.NEAREST)
txt =""
foriinrange(HEIGHT):
forjinrange(WIDTH):
txt += get_char(*im.getpixel((j,i)))
txt +='\n'
print(txt)
ifOUTPUT:
withopen(OUTPUT,'w')asf:
f.write(txt)
else:
withopen('output.txt','w')asf:
f.write(txt)
“扫一扫有惊喜”
领取专属 10元无门槛券
私享最新 技术干货