序
继续学习。开始练习一些小项目,个人感觉练习项目能提升自己的技术。比只看一些文章,纸上谈兵要好很多。
简介
此次的项目比较简单,先从简单的入手,循序渐进
我的实验环境是Windows 10 + Python 3.6+ PyCharm
本次项目牵扯的图片处理,所以用到的模块有Pillow,其次使用的命令行参数模块optparse。
步骤
一、创建项目“2020701”
二、导入需要用到的模块
from PIL import Image
import optparse
三、字符画用到的字符集如下:
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. ")
四、本人的参考代码:
from PIL import Image
import optparse
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. ")
# RGB转化为字符
def getChar(r,g,b,m=256):
if m == 0 :
return ' '
length = len(ascii_char)
# RGB转换为灰度值
gray = int(0.2126 * r + 0.7152 *g + 0.0722 * b)
unit = (256.0 + 1)/length
return ascii_char[int(gray/unit)]
# 命令行参数
def main():
parser = optparse.OptionParser(u"使用方法: python ascii.py -f <图片文件>")
parser.add_option('-f', dest='TargetImage', type='string', help=u'指定图片文件')
parser.add_option('-w', dest='WIDTH', type=int, help=u'指定字符画宽')
parser.add_option('-H', dest='HEIGHT', type=int, help=u'指定字符画高')
options, args = parser.parse_args()
WIDTH = options.WIDTH
HEIGHT = options.HEIGHT
if options.TargetImage == None :
print(parser.usage)
exit(0)
else:
TargetImage = options.TargetImage
img = Image.open(TargetImage)
WIDTH = img.size[0] # 获取图片的宽度
HEIGHT = img.size[1] # 获取图片的高度
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += getChar(*img.getpixel((j,i)))
txt += 'n'
print txt
# 写入TXT文件中
with open("out.txt", 'w') as f:
f.write(txt)
if __name__ == '__main__':
main()
五、查看实验效果:
python ascii.py -f dora.png
实验原图
另外我用下面这张图片的一部分测试,也是可以的。
不足之处
通过实验,我发现这个代码不适用与大图片和颜色太复杂的图片。我的电脑屏幕不是太大,如果图片太大,命令行显示不了,结局是各种符号混杂。颜色如果太多,不容易看到原始图像。