使用python pillow 图片转字符串

使用Pillow来处理图像的基础教程:

参考教程:http://pyhome.org/pythonbian-cheng-zhong-shi-yong-pillowlai-chu-li-tu-xiang-de-ji-chu-jiao-cheng-/

Image类
1. 打开一张图片

>>> from PIL import Image
>>> im = Image.open("ascii_dora.png")

如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容

>>> print(im.format,im.size,im.mode)
('PNG', (153, 153), 'RGBA')

format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属
性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。

如果文件不能打开,则抛出IOError异常。

>>> im.show()   #显示图片,先将图像保存为一个临时文件,然后使用xv显示

>>> im.save("new.jpg")   #保存图片,save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。

使用thumbnail()方法创建缩略图

>>> size=(50,50)   #设置缩小后的尺寸
>>> im.thumbnail(size)   #缩略函数
>>> im.save("thumbnail.jpg")   #保存
>>> box=im.copy()   #直接复制图片
>>> box
<PIL.Image.Image image mode=RGBA size=50x50 at 0x7FD046DA8850>

从图片中复制子图像
坐标中的数字单位为像素点,坐标原点为左上角(0,0),区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)
其实就是取左上角(left,upper)沿横竖方向到达右下角(right,lower)路线围成的矩形区域

>>> box = (100, 100, 400, 400)
>>> region = im.crop(box)   #按box的设置从im中截取区域

处理子图,粘贴回原图
将子图paste回原图时,子图的region必须和给定box的region吻合

>>> region = region.transpose(Image.ROTATE_180)
>>> im.paste(region, box)

图片转字符串

来源:https://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/370

效果:
这里写图片描述这里写图片描述

代码:

from PIL import Image       #从PIL中倒入Image类
import argparse             #argparse模块用于命令行参数控制

parser=argparse.ArgumentParser()
parser.add_argument('file')     #增加参数file
parser.add_argument('-O','--output')    #参数--output
parser.add_argument('--width',type=int,default=80)  #参数--width
parser.add_argument('--height',type=int,default=80) #参数--height
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;:\"^`'.")      #字符串列表

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)  #RGB转换为灰度

    unit=(256.0+1)/length      #
    return ascii_char[int(gray/unit)]    #获取该灰度在字符串列表中所对应的字符

if __name__=='__main__':
    im=Image.open(IMG)      #打开图片args.file,返回Image对象
    im=im.resize((WIDTH,HEIGHT),Image.NEAREST)   #重置尺寸

    txt=""
    for i in range(HEIGHT):      #HEIGHT,WIDTH默认是80像素
        for j in range(WIDTH):
            txt+=get_char(*im.getpixel((j,i)))  #获取像素,计算对应字符,保存到txt中,获取像素点这里用的是getpixel((i,j))函数
        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)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值