20193316 《Python程序设计》实验四报告
20193316 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 1933
姓名: 姜灼
学号:20193316
实验教师:王志强
实验日期:2020年6月4日
必修/选修: 公选课
- 1. 实验内容:图片转字符画小工具
2. 实验过程及结果
from PIL import Image
import 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_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 将256灰度映射到70个字符上
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)]
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)
结果展示:
3码云链接:
https://gitee.com/python_programming/A20193316/issues/I1KJCD
4. 实验过程中遇到的问题和解决过程
问题:不太了解argpars库
问题解决方案:在网上求助,自学看视频,逐渐学会了相关知识点。
问题:按照网上的教程弄的pillow图像处理库无法打开
问题解决方法:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后用xv进行显示,。如果没有安装xv,该函数甚至不能工作。
5.课程感悟: 总的来说是一门不错的变成语言入门课。学完王老师的python课之后,对python这门语言的整体框架有了一个宏观的了解,还提升了自学能力,以及其他一些改变自身拖延症等其他毛病的解决方案。虽然在python很多细节方面学得还不够深入,但是作为一门公选课,相比于其他的课程,王老师的课程性价比已经相当地高了,正所谓“师傅领进门,修行在个人”。Python世界里还有很多有趣的小实验,学了这门入门课,各种十行代码的小程序,对照着一些视频,自己就能轻松掌握了。