实现图片转字符

来源:互联网 发布:mac os 离线升级 编辑:程序博客网 时间:2024/05/17 05:08

实验环境:

1win1064bit

2Python3.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)

 

实验效果:

 

 

实验总结

 

1argparse库,PIL库要熟练掌握;

2、对于文件的操作,读写要熟悉

3、灰度值的概念,图像色彩的实现

文章参考:

1Pythonimage模块的方法:

http://www.cnblogs.com/DjangoBlog/p/3557744.html

2廖雪峰的python教程:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

3argparse模块简易教程:

 https://blog.ixxoo.me/argparse.html

4、灰度值的计算方法 :

http://blog.csdn.net/cool1949/article/details/6649429

5、题目来源:

https://www.shiyanlou.com/courses/370

 

 

原创粉丝点击