- 用到的库:Pillow,argparse
pillow用于解析图片
argparse解析命令行参数 - 思路:
1.用灰度值公式将像素的rgb值转换成灰度值
2.创建一个灰度值的映射字符列表
3.打印字符,输出到txt文件 - 用法:
python ascii.py file -o .output.txt --width 40 --height 40
file 是需要转换的图片的路径
-o 、–width 、 –height 为可选参数,分别是输出的文件路径、设置图片宽度和高度
代码如下:
import argparse
from PIL import Image
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_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)
unit=(256+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)))
txt+='\n'
print(txt)
if OUTPUT:
with open(OUTPUT,'w') as f:
f.write(txt)
else:
with open('output.txt','w') as f:
f.write(txt)