欢迎光临!
若无相欠,怎会相见

Python练手项目(1):图片转字符画

继续学习。开始练习一些小项目,个人感觉练习项目能提升自己的技术。比只看一些文章,纸上谈兵要好很多。

简介

此次的项目比较简单,先从简单的入手,循序渐进

我的实验环境是Windows 10 + Python 2.7 + PyCharm

本次项目牵扯的图片处理,所以用到的模块有Pillow,其次使用的命令行参数模块optparse。

步骤

一、创建项目“20171206”

二、导入需要用到的模块

from PIL import Image
import optparse

三、字符画用到的字符集如下:

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

四、本人的参考代码:

# -*- coding: utf-8 -*-
# @Time    : 2017/12/6 16:44
# @Author  : Darker
# @Site    : www.liangz.org
# @File    : ascii.py
# @Software: PyCharm


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

实验原图另外我用下面这张图片的一部分测试,也是可以的。

不足之处

通过实验,我发现这个代码不适用与大图片和颜色太复杂的图片。我的电脑屏幕不是太大,如果图片太大,命令行显示不了,结局是各种符号混杂。颜色如果太多,不容易看到原始图像。

赞(0) 打赏
转载请注明:飘零博客 » Python练手项目(1):图片转字符画
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临