PIL库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素,色彩操作功能,还可以用于图像归档和批量处理
库名:pillow
下载方式:IDLE通过cmd 输入>pip install pillow;pycharm——>File——>setting——>project,Pythonproject点击加号,找到pillow下载
PIL库支持图像存储、显示和处理,它能够处理几乎所有的图片格式,可以完成图像的缩放、剪裁、叠加、以及向图像添加线条,图像和文字等操作
PIL库主要可以实现图像归档和图像处理两方面功能需求
PIL库包括21个与图片有关的类
Image | ImageChops | ImageColor | ImageCrackCode | ImageDraw | ImageEnhance |
---|---|---|---|---|---|
ImageFile | ImageFileI() | ImageFilter | ImageFont | ImageGL | ImageGrab |
Imagemath | ImageOps | ImagePalette | ImagePath | ImageQt | ImageSequence |
ImageStat | ImageTk | ImageWin |
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("D:\\LOL.jpg")
要求在D盘中先有一个名为LOL.jpg名字的文件
Image类的常用属性
属性 | 描述 |
---|---|
Image.format | 标识图像格式或来源,如果图像不是从文件读取,值为None |
Image.mode | 图像的色彩模式,“L"为灰色图像”RGB“为真彩色图像,”CMYK“为出版图像 |
Image.size | 图像宽度和高度,单位为像素(px),返回值是二元元组(tuple) |
Image.palette | 调色板属性,返回一个ImagePalette类型 |
实例:
from PIL import Image
im = Image.open("D:\\LOL.jpg")
print(im.format, im.size, im.mode)
=======================================================================================
JPEG (1280, 768) RGB
Image还能读取序列类图像文件,包括GIF,FLI,FLC,TIFF等格式文件。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法可以在不同帧之间移动。
Image类的·序列图像操作方法
方法 | 描述 |
---|---|
Image.seek(frame) | 跳转并返回图像中的指定帧 |
Image.tell() | 返回当前帧的序号 |
实例:
from PIL import Image
im = Image.open('D:\\Loading.gif')
try:
im.save('D:\\picframe{:02d}.png'.format(im.tell()))
while True:
im.seek(im.tell()+1)
im.save('D:\\picframe{:02d}.png'.format(im.tell()))
except:
print("处理结束")
Image类的图像转换和保存方法
方法 | 描述 |
---|---|
Image.save(filename, format) | 将图像保存为filename文件名,format是图片格式 |
Image.convert(mode) | 使用不同的参数,转换图像为新的模式 |
Image.thumbnail(size) | 创建图像的缩略图,size是缩略尺寸的二元元组 |
from PIL import Image
im = Image.open("D:\\LOL.jpg")
im.save("D:LOL.gif")
im.thumbnail((128,128))
im.save("D:\\LOL","JPEG")
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 |
from PIL import Image
im = Image.open("D:\\LOL.jpg")
r,g,b = im.split()
om = Image.merge("RGB",(b,g,r))
om.save("D:\\LOLchangecolor.jpg")
结果:
PIL库的ImageFiler类和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 | 图像的锐化效果 |
利用 Image类的filter()方法可以使用ImageFilter类,使用方法如下:
Image.filter(ImageFilter.fuction)
实例:
from PIL import Image
from PIL import ImageFilter
im = Image.open("D:\\LOL.jpg")
om = im.filter(ImageFilter.CONTOUR)
om.save("D:\\LOLContour.jpg")
ImageEnhance类的图像增强和滤镜方法
方法 | 描述 |
---|---|
ImageEnhance.enhance(factor) | 对选择属性对的数值增强factor倍 |
ImageEnhance.Color(im) | 调整图像的颜色平衡 |
ImageEnhance.Contrast(im) | 调整图像的对比值 |
ImageEnhance.Brightness(im) | 调整图像的亮度 |
ImageEnhance.Sharpness(im) | 调整图像的锐度 |
增强图像的对比值为初始值的20倍
from PIL import Image
from PIL import ImageEnhance
im = Image.open("D:\\LOL.jpg")
om = ImageEnhance.Contrast(im)
om.enhance(20).save("D:\\LOL20.jpg")
CMYK色彩是彩色印刷时采用的一套色彩体系,也称印刷四色。CMYK利用色彩的三原色的黑色墨油混合叠加,形成各种色彩。