python PIL的学习及其应用


PIL库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素、色彩操作功能,还可以用于图像归档和批量处理。

PIL库的安装

:\>pip install pillow #或者 pip3 install pilow

根据功能不同,PIL库共包括了21个模块:

Image, ImageChops, ImageColor, ImageCrackCode, ImageDraw.
ImageEnhance, ImageFile, ImageFilelO, ImageFilter, ImageFont.
ImageGL、 ImageGrab, Imagemath, ImageOps, ImagePalette, ImagePath.
ImageOt, ImageSequence, ImageStat, ImageTk, ImageWin

在下面重点介绍PIL库几个最常用的子库:

Image库

Image是PIL最重要的类,它代表一张图片,引入这个类的方法如下:

 

from PIL import Image

 

Image 类的图像读取和创建方法如下表:

               方法

                 描述

Image.open(filename)

根据参数加载图像文件

Image.new(mode,size,color)

根据给定参数创建一个新的图像

Image.open(StringIO.StringIO(buffer))

从字符串中获得图像
Image.frombytes(mode.size,data)

根据像素点data创建图像

Image.verify()

对图像文件完整性进行检查,返回异常

 

 

 

 

 

 

 

 

 

 

 

 

 

要加载一个图像文件,最简单的方式如下:

from PIL import Image
im=Image.open("C:\\Users\\Administrator\\Desktop\\cyhz.jpg")

 

Image 类有四个处理图片的常用属性,如下表:

 

属性

 描述

Image.format

标识图像格式或来源,如果图像不是从文件中读取,值为None

Image.mode

图像的色彩模式,”L“为灰度图像、”RGB“为真彩色图像、”CMYK“为出版图像

Image.size

图像的宽度和高度,单位是像素,返回值是二元元组

Image.palette

调色板属性,返回一个ImagePalette类型

 

 

 

 

 

 

 

 

 

 

 

查看上面所打开图像文件的属性如下:

print(im.format,im.size,im.mode)

 

Image 还能读取序列类图像文件,包括GIF、FLI、FLC、TIFF等格式文件。

Image 类的序列图像操作方法如下表:

方法

描述

Image.seek(frame)

跳转并返回图像中的指定帧

Image.tell()

放回当前帧的序号

 

 

 

 

 

 

 

 

Image类的图像转换和保存方法如下表:

方法

描述

Image.save(filename,format)

将图像保存为filename文件名,format是图片格式

Image.convert(mode)

使用不同的参数,转换图像为新的模式

Image.thumbnail(size)

创建图像的缩略图,size是缩略图尺寸的二元元组

 

 

 

 

 

 

 

 

 

Image类的图像旋转和缩放方法如下表:

方法

描述

Image.resize(size)

按size大小调整图像,生成副本

Image.rotate(angle)

按angle角度旋转图像,生成副本

 

 

 

 

 

 

 

Image类的图像像素和通道处理方法如下表:

方法

描述

Image.point(func)

根据函数func的功能对每个元素进行运算,返回图像副本

Image.split()

提取RGB图像的每个颜色通道,返回图像副本

Image.merge(mode,bands)

合并通道,其中mode表示色彩,bands表示新的色彩通道
Image.blend(im1,im2,alpha)

将两幅图片im1和im2按照如下公式插值后生成新的图像:

im1 *(1.0-alpha) + im2 *alpha

 

 

 

 

 

 

 

 

 

 

 

 

ImageFilter 库和ImageEnhance 库

PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法。

ImageFilter类的预定义图像过滤方法如下表:

方法表示

描述

ImageFilter.BLUR

图像的模糊效果

ImageFilter.CONTOUR

图像的轮廓效果

ImageFilter.DETAIL

图像的细节效果

ImageFilter.EDGE_ENHANCE

图像的边界加强效果

ImageFilter.EDGE_ENHANCE_MORE

图像的阈值边界加强效果

ImageFilter.EMBOSS

图像的浮雕效果

ImageFilter.FIND_EDGES

图像的边界效果

ImageFilter.SMOOTH

图像的平滑效果

ImageFilter.SMOOTH_MORE

图像的阈值平滑效果

ImageFilter.SHARPEN

图像的锐化效果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ImageEnhance类提供了更高级的图像增强功能,如下表所示:

方法 描述

ImageEnhance.enhance(factor)

对选择属性的数值增强factor倍

ImageEnhance.Color(im)

调整图像的颜色平衡

ImageEnhance.Contrast(im)

调整图像的对比度

ImageEnhance.Brightness(im)

调整图像的亮度

ImageEnhance.Sharpness(im)

调整图像的锐度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上就是PIL库比较重要的几个子库的介绍,接下来将用其应用到实际例子上。

1、对图片进行缩略,生成缩略图,代码如下:

from PIL import Image
im=Image.open("C:\\Users\\Administrator\\Desktop\\cyhz.jpg")
im.thumbnail((128,128))
im.save("cyhzslt","JPEG")

2、改变图像的颜色,代码如下:

from PIL import Image
im=Image.open("C:\\Users\\Administrator\\Desktop\\lyslt.jpg")
r,g,b=im.split()
om= Image.merge("RGB",(b,g,r))
om.save("C:\\Users\\Administrator\\Desktop\\ly1.jpg")

与原图对比(左边为原图,右边为改变颜色后的图):

 

 

3、对图片进行轮廓处理,代码如下:

from PIL import Image
from PIL import ImageFilter
im=Image.open("C:\\Users\\Administrator\\Desktop\\cyhzslt.jpg")
om=im.filter(ImageFilter.CONTOUR)
om.save("C:\\Users\\Administrator\\Desktop\\ly3.jpg")

 

 

对比如下(左图为原图,右图为轮廓图):

 

 

 

 4、对图片进行浮雕操作处理,代码如下:

from PIL import Image
from PIL import ImageFilter
im=Image.open("C:\\Users\\Administrator\\Desktop\\lyslt.jpg")
om=im.filter(ImageFilter.EMBOSS)
om.save("C:\\Users\\Administrator\\Desktop\\ly5.jpg")

对比如下(左图为原图,右图为轮廓图):

 

 

 

5、对一个GIF格式动态文件,提取其中各帧图像,并保存为文件,代码如下:

from PIL import Image
im = Image.open('C:\\Users\\Administrator\\Desktop\\timg.gif')      # 读入一个GIF文件
try:
    im.save('aa{:02d}.png'.format(im.tell()))
    while True:
        im.seek(im.tell()+1)
        im.save('aa{:02d}.png'.format(im.tell()))
except:
    print("处理结束")

 动图如图:

提取各帧图像的结果为:

 

 

6、增强图像的锐度,代码为:

from PIL import Image
from PIL import ImageEnhance
im = Image.open('C:\\Users\\Administrator\\Desktop\\lyslt.jpg')
om=ImageEnhance.Sharpness(im)
om.enhance(20).save('C:\\Users\\Administrator\\Desktop\\sad.jpg')

效果为(左图为原图,右图为增强20倍锐度):

 

 

7、生成一个好玩的GIF图,代码如下:

import PIL.Image as Image
def get_gif(pics_dir,n,t=0.1):
    imgs = []
    for i in range(n):
        pic_name = '{}\\{}.jpg'.format(pics_dir,i+1)
        temp = Image.open(pic_name)
        imgs.append(temp)
    save_name = '{}.gif'.format(pics_dir)
    imgs[0].save(save_name, save_all=True, append_images=imgs, duration=t)
    return save_name
if __name__ == '__main__':
    pics_dir = 'C:\\Users\\Administrator\\Desktop\\我'
    save_name = get_gif(pics_dir,6,900)
    print('制作完成。所属文件:{}'.format(save_name))

 生成GIF用了18张图片如图:

 

生成的GIF的效果如下图:

 

 

以上就是一些关于PIL库的应用。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM