文章目录

  • 简介
  • PIL库的Image类解析
  • 图像格式转换和保存方法
  • 图像的颜色交换
  • 图像过滤与增强


简介

PIL库是Python语言处理图像的第三方库,其中包含了丰富的像素、色彩操纵功能,它还能够用作图像的归档与批量处理。
PIL库不在python内置的标准库中,需要使用pip指令安装。不过要注意的是,安装库的名字是pillow。
本文将介绍PIL库常用的几个子库:Image、ImageFilter、ImageEnhance。

PIL库的Image类解析

Image是PIL库最重要的累,它代表一张图片。
在PIL中,任何图像都能够使用Image对象表示,具体方法如下表所示:

方法

描述

Image.open(filename)

根据参数加载图像文件

Image.new(mode,size,color)

根据给定参数创建新的图像

Image.open(StringIO.StringIO(buffer))

从字符串中获取图像

Image.frombytes(mode,size,data)

根据像素点data创建图像

Image.verify()

对图像完整性检查,返回异常

通过Image打开图像文件的时候,图像的栅格数据不会被解码或者加载,程序只是读取了图像文件的头部元数据信息,其中包含了图像的颜色、大小、格式等。正因为这样,所以Image打开文件的速度很快而且与图像的存储与压缩方式无关。
下面实例是加载图片后,获取图像文件的属性:

from PIL import Image

im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\zyf.png")
print(im.format,im.size,im.mode)

python中pil库 python的pil库_开发语言


上面代码中,zyf.png是图片名称,存放在桌面的python_test文件夹中,本例中使用的是全路径,各位读者也可以采用相对路径,不过需要将图片和程序文件放在同一个目录中。

图像格式转换和保存方法

Image类的图像和保存方法如下所示:

方法

描述

Image.save(filename,format)

将图像文件名保存为filename,format是图片格式

Image.convert(mode)

使用不同的参数,转换图像成新模式

Image.thumbnail(size)

创建图像缩略图,size是缩略图尺寸的元组

下面是转格式的实例:

from PIL import Image

im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\zyf.png")
im.save("zyf.jpg")
print("已完成")

python中pil库 python的pil库_python中pil库_02


当然,此方法也能演示如何创建缩略图:

from PIL import Image

im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\zyf.png")
im.thumbnail((100,100))
im.save("zyfTN.jpg")
print("缩略图完成")

与原图的对比:

python中pil库 python的pil库_开发语言_03

图像的颜色交换

通过交换图像的RGB通道实现颜色的交换:

from PIL import Image

im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\viewtest.jpg")
r,g,b = im.split()
om = Image.merge("RGB",(b, g, r))
om.save("viewtestBGR.jpg")
print("颜色变换完成")

颜色对比如下,左图为变换后,右图为变换前:

python中pil库 python的pil库_开发语言_04

图像过滤与增强

通过ImageFilter方法可以实现图片过滤或者增强,以下通过一个实例实现图像的轮廓获取。

from PIL import Image,ImageFilter

im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\viewtest.jpg")
om = im.filter(ImageFilter.CONTOUR)
om.save("viewtestContour.jpg")
print("轮廓获取完成")

以下是图片对比:

python中pil库 python的pil库_python_05


除了图片轮廓获取,还能够做到图片增强:

from PIL import Image,ImageEnhance

im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\viewtest.jpg")
om = ImageEnhance.Contrast(im)
om.enhance(20).save("viewtestContrast.jpg")
print("对比度增强完成")

以下是图片结果对比:

python中pil库 python的pil库_python_06