实验环境:
1、win10—64bit
2、Python3.5
实验程序:
from PIL import Image #从库中引入Image
import argparse #调用argparse库
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
def color_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)]
parser = argparse.ArgumentParser()
parser.add_argument('file')
parser.add_argument('-o','--output')
parser.add_argument('--width',type = int ,defult = 80)
parser.add_argument('--height',type = int,defult = 80)
arg = parser.parse_args()
IMg = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
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 += color_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)
程序分析:
1、灰度转变为相对应的字符:
灰度值越大,对应的颜色就越浅,0对应全黑,255则对应全白
def color_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)]
2、对argparse模块的调用:
需要注意的是,argparse是一个命令行操作指令,简言之就是在运行这个demo的时候,是通过命令行窗口来实现运行的(不是通过F5)。
arser = argparse.ArgumentParser()
parser.add_argument('file') #文件名称
parser.add_argument('-o','--output') #定义了一个output变量,用作输出用
parser.add_argument('--width',type = int ,defult = 80)#从图片中获得图片的属性,宽度
parser.add_argument('--height',type = int,defult = 80)#获得该图片的属性,高度
arg = parser.parse_args() #对获得的对象的各个参数进行解析
IMg = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
3、这一模块包括了图片的打开,文件的读写操作
if __name__ == '__main__':
im = Image.open(IMG)
im = im.resize((WIDTH,HEIGHT),Image.NEAREST) #这是Image库提供的一个改变图片大小的方法
txt = ""
#对一张图片的每一个像素点进行“扫描”操作
for i in range(HEIGHT):
for j in range(WIDTH):
txt += color_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)
实验效果:
实验总结
1、argparse库,PIL库要熟练掌握;
2、对于文件的操作,读写要熟悉
3、灰度值的概念,图像色彩的实现
文章参考:
1、Python的image模块的方法:
http://www.cnblogs.com/DjangoBlog/p/3557744.html
2廖雪峰的python教程:
3、argparse模块简易教程:
https://blog.ixxoo.me/argparse.html
4、灰度值的计算方法 :
http://blog.csdn.net/cool1949/article/details/6649429
5、题目来源:
https://www.shiyanlou.com/courses/370