一.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.加载一个图像文件(最简单的形式)
2、Image类的常用属性
属性 | 描述 |
Image.format | 识别图像格式或来源,如果图像不是从文件读取,值为None |
Image.mode | 图像的色彩模式,“L”为灰色图像、“RGB”为真彩色图像、“CMYK”为出版图像 |
Image.size | 图像的宽度和高度,单位是像素(px),返回值是二元元组(tuple) |
Image.palette | 调色板属性,返回一个ImagePalette类型 |
eg.查看图像文件的属性
3、Image还能读取序列类图像文件,包括 gif / fli / flc / tiff 等文件格式。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法在不同帧之间的移动:
//Image类的序列图像操作处理
方法 | 描述 |
Image.seek(frame) | 跳转并返回图像中的指定帧 |
Image.tell() | 返回当前帧的序列 |
eg.对一个GIF格式动态文件,提取其中个帧图像,并保存为文件:
4、Image类的图像转换和保存方法
方法 | 描述 |
Image.save(filenma,format) | 将图像保存为filename文件名,format是图片格式 |
Image.convert(mode) | 使用不同的参数,转换图像为新的模式 |
Image.thumbnail(size) | 创建图像的缩略图,size是缩略图尺寸的二元元组 |
#open()和save()的参数是:文件名filename和图像格式formt
eg.
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()
效果图:
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()
效果图:
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()
效果图:
四、jif图像的制作