两个必要的库
图像处理库 PIL。
argparse库主要管理命令行参数设置。
1)导入
from PIL import Image
import argparse
2)命令行参数设置
引入一个概念 ArgumentParser
Argument Parser 参数解析器
parser = argparse.ArgumentParser()
个人理解就像java实例一个对象一样,具有ArgumentParser()的属性。
定义输入文件、输出文件、输出字符画的宽和高
parser.add_argument('file')
parser.add_argument('-o','--output')
parser.add_argument('--width',type = int, default = 40)
parser.add_argument('--height',type = int, default = 40)
这里可以设置自己想要的图片大小
3)获取参数
引入概念parse_args()
parse_args(args=None, nampespace=None)
args #参数名称
namespace #赋值
args = parser.parse_args()
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
设置画画字符
ascii_char = list("!@#$%^&^*QWERTYUIOASDFGHJKLZXCVBNM<>?qwertyuiop[]asdfghjkl;zxcvbnm,.")
很长的一串是待会图像中会使用的字符。
4)灰度映射到字符
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.0 + 1)/length
return ascii_char[int(gray/unit)]
这里灰度公式是简化版的,处理一般图像够用。
5)运行
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)
getpixel函数-----(图像定位函数)
https://blog.youkuaiyun.com/MiniCatTwo/article/details/80608076
参考来源:
实验楼 图片转字符画