图片变ascii字符画程序设计_Python练手项目(1):图片转字符画

3e274f1425d0880d340ab9b19e71cea5.gif

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

简介

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

我的实验环境是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

3d0e05c141f3abf73fb03f9f9a39162c.png

实验原图

d28a6aea5ad9e443f64622c0d07459b6.png

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

d80036e245ec16b95736f5492a465ca7.png

不足之处

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值