• PIL库的学习


    PIL库概述

      PIL库可以完成图像归档和图像处理两方面功能需求:

           图像归档:对图像进行批处理、生成图像预览、图像格式转换等;

           图像处理:图像基本处理、像素处理、颜色处理等

    基本方法:①Image.open(filename):根据参数加载图像文件。可填入图像的具体的储存位置。

         ②<图像变量>.save('储存地址'):储存处理后的图像。

    1、Image类。【任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法】

    from PIL import Image

      这里只简要解析几个方法。

    <1>Image.thumbnail(size):创建图像的缩略图,size是缩略图尺寸的二元元组。

    实例:

    1 pA = Image.open("D:\桌面\pytest\景色1.jpg")       #打开
    2 pA.thumbnail((128,128))                             #缩略
    3 pA.save("D:\桌面\pytest\景色1_TN.jpg")               #保存

       原图(1) 

       缩略图

    <2>Image.point(func):根据函数func功能对每个元素进行运算,返回图像副本。

    <3>Image.split():提取RGB图像的每个颜色通道,返回图像副本。

    <4>Image.merge(mode,bands):合并通道 ,采用mode色彩,bands是新色的色彩通道。

    实例:

    1 pB = Image.open("D:\桌面\pytest\景色2.jpeg")      #打开
    2 #改变颜色
    3 r,g,b = pB.split()                              #获得RGB通道数据
    4 newr = r.point(lambda i:i*1.5)                 # 将R通道颜色值变为原来的1.5倍
    5 newb = b.point(lambda i:i*0.8)                 # 将b通道颜色值变为原来的0.8倍
    6 newpB_merge = Image.merge(pB.mode, (newr, g, newb))     # 将3个通道合形成新图像
    7 newpB_merge.save("D:\桌面\pytest\景色2_Merge.jpeg")

       原图 (2)

       改变颜色后

    2、ImageFilter类和ImageEnhance类。【PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法】ps:此处只列举ImageFilter的几个方法。

    from PIL import ImageFilter

    ————可利用Image类的filter()方法使用ImageFilter类,如:Image.filter(ImageFilter.fuction)

    <1>ImageFilter.CONTOUR:图像的轮廓效果。

    实例:(此处使用原图(2))

    1 from PIL import Image
    2 from PIL import ImageFilter 
    3 
    4 pB = Image.open("D:\桌面\pytest\景色2.jpeg")      #打开
    5 
    6 #轮廓
    7 newpB_contour = pB.filter(ImageFilter.CONTOUR)        
    8 newpB_contour.save("D:\桌面\pytest\景色2_Contour.jpg")

                        轮廓图                         

    <2>ImageFilter.EMBOSS:图像的浮雕效果。

    实例:(此处使用原图(1))

    1 from PIL import Image
    2 from PIL import ImageFilter 
    3 pA = Image.open("D:\桌面\pytest\景色1.jpeg")      #打开
    4 
    5 #浮雕
    6 newpA_emboss = pA.filter(ImageFilter.EMBOSS)     
    7 newpA_emboss.save("D:\桌面\pytest\景色1_Emboss.jpg")

                                    浮雕图

    ————————————————————--------------------------------------------------——————————————————————-

    图像字符化绘制

     1 from PIL import Image
     2 ascii_char  = list('"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxr
     3 jft/|()1{}[]?-/+@<>i!;:,^`.')
     4 def get_char(r, b, g, alpha=256):
     5     if alpha == 0:
     6         return ' '
     7     gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)   #灰色rbg
     8     unit = 256 / len(ascii_char)
     9     return ascii_char[int(gray//unit)]
    10 def main():
    11     im = Image.open('D:\桌面\pytest\picture7.png')
    12     WIDTH, HEIGHT = 500,300
    13     im = im.resize((WIDTH, HEIGHT))
    14     txt = ""
    15     for i in range(HEIGHT):
    16         for j in range(WIDTH):
    17             txt += get_char(*im.getpixel((j, i)))  #getpixel函数是用来获取图像中某一点的像素的RGB颜色值,getpixel的参数是一个坐标点。对于图象的不同的模式,getpixel函数返回的值有所不同。
    18         txt += '
    '
    19     fo = open("D:\桌面\pytest\pic_char.txt","w")
    20     fo.write(txt)
    21     fo.close()
    22 main()

           

    提取GIF各帧图像
    1 from PIL import Image
    2 im = Image.open('D:\桌面\pytest\bekilled.gif')      # 读入一个GIF文件
    3 try:
    4     im.save('D:\桌面\pytest\picframe{:02d}.png'.format(im.tell()))
    5     while True:
    6         im.seek(im.tell()+1)   #文件seek()的运用。改变当前文件操作指针的位置,offset的值:0:文件开头; 1: 当前位置; 2: 文件结尾  
    7         im.save('D:\桌面\pytest\picframe{:02d}.png'.format(im.tell()))
    8 except:
    9     print("处理结束")

    (gif文件来源百度)

        

    自制生成GIF

    小编将上面处理过的一些图像生成GIF,为此将图像统一存放在一个文件夹里(并重命名),且都转化为png格式。

    1 from PIL import Image
    2 imgs = []
    3 for i in range(1,12):
    4     pic_name = 'D:\桌面\素材\picture{}.png'.format(i)
    5     picture = Image.open(pic_name)
    6     temp = picture.resize((400,250))
    7     imgs.append(temp)
    8 
    9 imgs[0].save('D:\桌面\素材\合成.gif',save_all=True, append_images=imgs, duration=0.5)

     

    【后记:若您在阅读过程中发现问题,请您斧正,小编将不胜感激。】

  • 相关阅读:
    TCP,IP,HTTP,SOCKET区别和联系
    添加Nginx为系统服务(设置开机启动)
    设计模式大全
    linux 命令行 光标移动技巧等
    Linux中ping命令
    TCP/IP协议 三次握手与四次挥手【转】
    Node 出现 uncaughtException 之后的优雅退出方案
    Google Protocol Buffers简介
    关于绝对路径和相对路径
    node定时任务——node-schedule模块使用说明
  • 原文地址:https://www.cnblogs.com/nicefurmine/p/12695390.html
Copyright © 2020-2023  润新知