文章目录
- 简介
- 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)
上面代码中,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("已完成")
当然,此方法也能演示如何创建缩略图:
from PIL import Image
im = Image.open("C:\\Users\\Administrator\\Desktop\\python_test\\zyf.png")
im.thumbnail((100,100))
im.save("zyfTN.jpg")
print("缩略图完成")
与原图的对比:
图像的颜色交换
通过交换图像的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("颜色变换完成")
颜色对比如下,左图为变换后,右图为变换前:
图像过滤与增强
通过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("轮廓获取完成")
以下是图片对比:
除了图片轮廓获取,还能够做到图片增强:
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("对比度增强完成")
以下是图片结果对比: