当前位置 主页 > 网站技术 > 代码类 >

    python图像处理模块Pillow的学习详解

    栏目:代码类 时间:2019-10-18 15:03

    今天抽空学习了一下之前了解过的pillow库,以前看到的记得这个库可以给图片上加文字加数字,还可以将图片转化成字符画,不过一直没有找时间去学习一下这个模块,由于放假不用训练,所以就瞎搞了一下

    0、工欲善其事,必先利其器

    关于pillow库的安装有几种方式

    0、使用pip安装

    $ pip install pillow

    1、使用easy_install

    $ easy_install pillow

    2、通过pycharm安装

    1、学习并使用pillow库

    #导入模块
    from PIL import Image
    #读取文件
    img = Image.open('test.jpg')
    #保存文件
    #img.save(filename,format)
    img.save(filename,"JPEG")
    #获取图片大小
    (width,height) = img.size
    #获取图片的源格式
    img_format = img.format
    #获取图片模式,有三种模式:L(灰度图像),RGB(真彩色)和CMYK(pre-press图像)
    img_mode = img.mode
    #图片模式的转换
    img = img.convert("L") #转化成灰度图像
    #获取每个坐标的像素点的RGB值
    r,g,b = img.getpixel((j,i))
    #重设图片大小
    img = img.resize(width,height)
    #创建缩略图
    img.thumbnail(size)

    2、实战演练

    其实应该很容易想到,如果要达到这种效果,应该能想得到就是获取图上每一点的RGB值,然后根据这三种值确定这一点采用什么字符,其实根据RGB来确定的交灰值,所以可以将图片转化成灰度图片,来直接获取每一点的灰度,或者通过灰度的转换公式来使得RGB三值转化成灰度

    #coding:utf-8
    from PIL import Image
    #要索引的字符列表
    ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
    length = len(ascii_char)
    img = Image.open('03.jpg')  #读取图像文件
    (width,height) = img.size
    img = img.resize((int(width*0.9),int(height*0.5))) #对图像进行一定缩小
    print(img.size)
    def convert(img):
     img = img.convert("L") # 转为灰度图像
     txt = ""
     for i in range(img.size[1]):
      for j in range(img.size[0]):
       gray = img.getpixel((j, i))  # 获取每个坐标像素点的灰度
       unit = 256.0 / length
       txt += ascii_char[int(gray / unit)] #获取对应坐标的字符值
      txt += '\n'
     return txt
    
    def convert1(img):
     txt = ""
     for i in range(img.size[1]):
      for j in range(img.size[0]):
       r,g,b = img.getpixel((j, i))   #获取每个坐标像素点的rgb值
       gray = int(r * 0.299 + g * 0.587 + b * 0.114) #通过灰度转换公式获取灰度
       unit = (256.0+1)/length
       txt += ascii_char[int(gray / unit)] # 获取对应坐标的字符值
      txt += '\n'
     return txt
    
    txt = convert(img)
    f = open("03_convert.txt","w")
    f.write(txt)   #存储到文件中
    f.close()

    给图片加上文字(福利预警,前方有福利!!!!)

    #coding:utf-8
    from PIL import Image,ImageDraw,ImageFont
    
    #http://font.chinaz.com/zhongwenziti.html 字体下载网站
    
    img = Image.open('PDD01.jpg')
    draw = ImageDraw.Draw(img)
    myfont = ImageFont.truetype('HYLiuZiHeiJ.ttf',size=80)
    fillcolor = 'pink'
    (width, height) = img.size
    #第一个参数是加入字体的坐标
    #第二个参数是文字内容
    #第三个参数是字体格式
    #第四个参数是字体颜色
    draw.text((40,100),u'萌萌哒',font=myfont,fill=fillcolor)
    img.save('modfiy_pdd01.jpg','jpeg')

    给图片加上数字