引言:在Python中,PIL(Python Imaging Library,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,例如图像的缩放、剪裁、旋转和颜色变换等。
PIL库支持图像的存储、显示和处理,能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条和文字等操作。
PIL库主要实现图像归档和图像处理两个方面的功能需求。
- 图像归档:对图像进行批处理、生成图像预览、转换图像格式等。
- 图像处理:图像的基本处理、像素处理、颜色处理等。
根据不同的功能,PIL库共包括21个与图像相关的类,这些类可以被看作是子库或PIL库中的模块,各模块如下:
Image、ImageChops、ImageCrackCode、ImageDraw、ImageEnhance、ImageFile、ImageFileIO、ImageFilter、ImageFont、ImageGrab、ImageOps、ImagePath、ImageSequence、ImageStat、ImageTk、ImageWin、PSDraw
1. Image模块:
提供图像操作功能:创建,打开,显示,保存图像等,合成,裁剪,滤波等功能,获取图像属性等功能。
from PIL import Image
pil_im = Image.open('empire.jpg')
newIm = Image.new('RGB',
(640, 480),
(255, 0, 0))
pil_im = Image.open('empire.jpg').convert('L')
pil_im.show()
#newIm.show() 如果加上会生成一红色图片
2. ImageChops模块
包含一些算数图形操作,channel operations(“chops”)。这些操作可以运用到图像特效,图像组合,算法绘图等。通道操作只作用于位图(L模式和RGB模式)。大多数通道操作有一个或两个图像参数,返回一个新的图像
每张图片都是由一个或者多个数据通道构成的。以GRB图像为例,每张图片都是由3个数据通道构成的,分别为R,G,B通道。对于灰度图像,只有一个通道。
from PIL import Image
from PIL import ImageChops
im = Image.open('empire.jpg')
im_dup = ImageChops.duplicate(im) # 复制图像 返回给定图像的副本
print(im_dup.mode) # 输出模式:'RGB'
im_diff = ImageChops.difference(im, im_dup) # 返回两幅图片之间像素差的绝对值形成的图像
im_diff.show()
3. ImageDraw模块
为image对象提供了基本的图形处理功能,例如它可以为图像添加几何图形。
以下代码就是为图片增添了对角线。
from PIL import Image, ImageDraw
im = Image.open('empire.jpg')
draw = ImageDraw.Draw(im)
draw.line((0, 0)+im.size, fill=128)
draw.line((0, im.size[1],
im.size[0],
0),
fill=128)
im.show()
4. ImageEnhance模块
ImageEnhance 模块包括了一些用于图像增强的类:color类、Brightness类、Contrast类和Sharpness类。
以下代码结果为亮度调整为原图✖0.5
from PIL import Image, ImageEnhance
im = Image.open('empire.jpg')
enhancer = ImageEnhance.Brightness(im)
im0 = enhancer.enhance(0.5)
im0.show()
5. ImageFile模块
为图像的打开和保存都提供了相关支持的功能。
6. ImageFilter模块
该模块包括各种滤波器的预定义集合,与Image 类的filter()方法一起使用。
该模块包含一些图像增强的滤波器,例如BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。
from PIL import Image
from PIL import ImageFilter
im = Image.open('empire.jpg')
im_out = im.filter(ImageFilter.BLUR)
print(im_out.size) # 图像的尺寸大小为(300, 450),他是一个二元组,即水平和垂直方向上的像素数
im_out.show()
7. ImageFont模块
该模块定义了一个同名的类,即ImageFont类。在这个类的实例中存储着bitmap字体,需要和ImageDraw类的text()方法一起使用。