学科分类
目录
网络爬虫

PIL库简介

图像处理是一门应用非常广的技术,拥有丰富第三方扩展库的Python语言当然不会错过这个盛宴。其中,PIL(Python Imaging Library)是Python最常用的图像处理库,它不仅提供了广泛的文件格式支持,而且具有强大的图片处理功能。

PIL库中一个非常重要的类是Image类,该类定义在与它同名的模块中。创建Image类对象的方法有很多种,包括从文件中读取得到,或从其它图像经过处理得到,或者创建全新的。下面对PIL库的一些常用函数和方法进行简单地介绍。

1.new()函数

new函数的定义格式如下:

Image.new(mode, size, color=0)

上述函数用于创建一个新图像。其中,mode表示模式,size表示大小。当创建单通道图像时,color是单个值;当创建多通道图像时,color是一个元组。若省略了color参数,则图像被填充成全黑;若color参数的值为None,则图像不被初始化。

2.open()函数

open函数的定义格式如下:

open(fp, mode="r")

上述函数可以打开并识别给定的图像文件。其中,fp表示字符串形式的文件名称,mode参数可以省略,但只能设置为“r”。如果载入文件失败,则会引起一个IOError异常,否则返回一个Image类对象。

实际上,上述函数会被延迟操作,实际的图像数据并不会马上从文件中读取,而是等到需要处理这些数据时才被读取。这时,可以调用load()函数进行强制加载。

创建图像对象后,可以通过Image类提供的方法处理这些图像。为了让大家更好地理解,以常用的如下两个方法(save()和point()方法)进行举例,讲解它们的基本使用。

  • save()方法

save()方法的定义格式如下:

save(self, fp, format=None, **params)

上述方法将以特定的图片格式保存图片。大多数情况下,可以省略图片的格式。这时,该方法会根据文件的扩展名来选择相应的图片格式,具体示例代码如下。

image.save("test.jpg","JPG")

或者:

save("test.jpg")
  • point()方法

point()方法可以对图像的像素值进行变换,其语法格式如下:

point(self, lut, mode=None)

在大多数场合中,可以使用函数(带一个参数)作为参数传递给point方法,图像的每个像素都会使用这个函数进行变换,示例代码如下。

# 每个像素乘以1.2
out = im.point(lambda i: i * 1.2) 

需要注意的是,如果图像的模式为“I”(整数)或“F”(浮点数),则必须使用函数,且必须具有以下格式:

argument(参数) * scale(倍率) + offset(偏移量) 

例如,映射浮点图像的示例如下:

out = im.point(lambda i: i * 1.2 + 10) 
点击此处
隐藏目录