PIL库的总结与简单应用

一.PIL库的简单介绍

1、PIL (Python Imaging Library)是 Python 中最常用的图像处理库,PIL支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、裁剪、叠加以及图像添加线条、图像和文字等操作。

2、PIL库主要可以实现图像归档和图像处理两方面功能需求。

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

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

3、根据功能的不同,PIL库共包括21个与图片相关的类,这些类可以被看做是子库或PIL库中的模块,Image是最常用的类(其他的类就不在此一一列出)

二.Image类的详细解析

1、文件的读取和创建   

          方法                描述 
Image.open(filename) 根据参数加载图片文件
Image.new(mode,size,color) 根据给定参数创建一个新的图像
Image.frombytes(mode,size,date) 根据像素点date创建图像
Image.open(StringIO,StringIO(buffer)) 从字符串中获取图像
Image.verify() 对图像文件完整性进行检查,返回异常

       

   

 

 

 

 

 

eg.加载一个图像文件(最简单的形式)

 

PIL库的总结与简单应用

 

2、Image类的常用属性

属性 描述
Image.format 识别图像格式或来源,如果图像不是从文件读取,值为None
Image.mode 图像的色彩模式,“L”为灰色图像、“RGB”为真彩色图像、“CMYK”为出版图像
Image.size 图像的宽度和高度,单位是像素(px),返回值是二元元组(tuple)
Image.palette  调色板属性,返回一个ImagePalette类型

 

 

 

 

 

 

 

eg.查看图像文件的属性

PIL库的总结与简单应用

 

 

3、Image还能读取序列类图像文件,包括  gif /   fli  /  flc  /  tiff 等文件格式。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法在不同帧之间的移动:

//Image类的序列图像操作处理

方法 描述
Image.seek(frame) 跳转并返回图像中的指定帧
Image.tell() 返回当前帧的序列

 

 

 

eg.对一个GIF格式动态文件,提取其中个帧图像,并保存为文件:

PIL库的总结与简单应用

 

4、Image类的图像转换和保存方法

方法 描述
Image.save(filenma,format) 将图像保存为filename文件名,format是图片格式
Image.convert(mode) 使用不同的参数,转换图像为新的模式
Image.thumbnail(size) 创建图像的缩略图,size是缩略图尺寸的二元元组

 

 

 

 

 

 

#open()和save()的参数是:文件名filename和图像格式formt

eg.

PIL库的总结与简单应用

5、Image类的图像旋转和缩放方法

方法 描述
Image.resize(size) 按size大小调整图像,生成副本
Image.rotate(angle) 按angle角度旋转图像,生成副本

 

 

 

 

 

eg.图像文件的缩小

代码示意如下:

 

1 from PIL import Image
2 im=Image.open("D:\\Python\\小宠物.jpg")#读取图像
3 print(im.format,im.size,im.mode)#读取图像文件的属性
4 im.show()
5 im_resized = im.resize((500, 400))    #原图像缩放为500x400 
6 im_resized.show() 

 

效果图:

PIL库的总结与简单应用

 

 

6、Image类能够对每个想像素点或者一幅RGB图像的每个通道单独进行操作。split()方法能够将RGB图像通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像。

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

三、图像的过滤和增强

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

方法表示 描述
Imagefilter.BLUR 图像的模糊效果
Imagefilter.CONTOUR 图像的轮廓效果
Imagefilter.DETAIL 图像的细节效果
Imagefilter.EDGE_ENHANCE 图像的边界加强效果
Imagefilter.EDGE_ENHANCE_MODE 图像的阈值边界加强效果
Imagefilter.EMBOSS 图像的浮雕效果
Imagefilter.FIND_EDGES 图像的边界效果
Imagefilter.SMOOTH 图像的平滑效果
Imagefilter.SMOOTH_MORE 图像的阈值平滑效果
Imagefilter.SHARPEN 图像的锐化效果

#利用Image类的filter()方法可以使用ImageFilter类,使用方法如下:

Image.filter(ImageFilter.function)

eg.图像轮廓的获取:

 

from PIL import Image
from PIL import ImageFilter
im=Image.open("D:\\Python\\小宠物.jpg")#读取图像
om=im.filter(ImageFilter.CONTOUR)
om.save("D:\\Python\\小宠物.jpg")
im.show()

 

效果图:

PIL库的总结与简单应用

 

 

 

7、ImagEnhance类提供了更高级的图像增强功能,如调整色彩度、亮度、对比度、锐化等。

ImagEnhance类的图像增强和滤镜方法:

方法 描述
ImagEnhance.enhance(factor) 对选择属性的数值增强factor倍
ImagEnhance.Color(im) 调整图像的颜色平衡
ImagEnhance.Contrast(im) 调整图像的对比度
ImagEnhance.Brightness(im) 调整图像的亮度
ImagEnhance.Sharpness(im) 调整图像的锐度

eg.图像对比度增强效果(增强图像的对比度为初始的10倍)

from PIL import Image
from PIL import ImageEnhance
im=Image.open("D:\\Python\\小宠物.jpg")#读取图像
om=ImageEnhance.Contrast(im)
om.enhance(10).save('D:\\Python\\小宠物.jpg')
im.show()

效果图:

 PIL库的总结与简单应用

 

 四、jif图像的制作