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库的应用。