Python Pillow PIL 库的用法介绍,Pillow库是一个Python的第三方库。
要点:PIL库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素、色彩操作功能,还可以用于图像归档和批量处理。
官方文档路径:https://pillow.readthedocs.io/en/latest/
在 Python2 中,PIL (Python Imaging Library) 是一个非常好用的图像处理库,但 PIL 不支持 Python3,所以 Alex Clark 和 Contributors 提供了 Pillow,使其可以在 Python3 中使用。
PIL(Python Image Library)库是 Python 语言的第三方库,需要通过pip工具安装。安装PIL库的方法如下,需要注意,安装库的名字是 pillow。
PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。
PIL库主要可以实现图像归档和图像处理两方面动能需求:
(1)图像归档:对图像进行批处理、生成图像预览、图像格式转换等。
(2)图像处理:图像基本处理、像素处理、颜色处理等。
pip install pillow
Image是PIL最重要的类,它代表一张图片,引入这个类的方法如下:
from PIL import Image
在 PIL 中,任何一个图像文件都可以用 Image 对象表示。Image类的图像读取和创建方法如下(共5个):
通过 Image 打开图像文件时,图像的栅格数据不会被直接解码或者加载,程序只是读取了图像文件头部的元数据信息,这部分信息标识了图像的格式、颜色、大小等。因此,打开一个文件会十分迅速,与图像的存储和压缩方式无关。
要加载一个图像文件,最简单的形式如下,之后所有操作对 im 起作用。
from PIL import Image
im = Image.open ("a.jpg")
在使用IDLE交互方式处理图片文件时,建议采用文件的全路径;如果使用Python文件形式,建议采用相对路径,将文件和程序放到一个目录中。
Image 类有 4 个处理图片的常用属性,如表所示 (共4个)
>>>print (im. format, im.size, im.mode)
JPEG (900, 598) RGB
创建白底的图片:def new(mode, size, color=0)
image = Image.new('RGB', (600, 600), (255, 255, 255))
Image类的图像转换和保存方法 (共3个) 如表所示。
其中,save()方法有两个参数:文件名 filename 和图像格式 format。如果调用时不指定保存格式,PIL将自动根据文件名filename后缀存储图像;如果指定格式,则按照格式存储。
搭配采用 open() 和 save() 方法可以实现图像的格式转换,例如,将 jpg 格式转换为 png 格式代码如下。需要注意,Image 类的 save() 方法主要用于保存文件到硬盘,PIL 库还提供了功能更强大的格式转换方法。
im = Image.open("a.jpg")
im.save("a.png")
Image类可以缩放和旋转图像,其中,rotate(方法以逆时旋转的角度值作为参数来旋转图像。
Image类的图像旋转和缩放方法(共2个):
Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作。split()方法能够将RGB 图像各颜色通道提取出来;
merge()方法能够将各独立通道再合成一幅新的图像。
lmage类的图像像素和通道处理方法(共4个):
图像的颜色交换,交换图像中的颜色,通过分离RGB图片的3个颜色通道实现颜色交换。
from PIL import Image
im = Image.open('a.jpg')
r, g, b = im.split()
om = Image.merge("RGB" , (b, g, r))
om.save('aBGR.jpg')
首先选取背景图:
选取需要被融合的图片:
融合代码展示如下:
from PIL import Image
background = Image.open('background.jpg')
problem = Image.open('problem.jpg')
problem = problem.resize((int(problem.size[0] / problem.size[1] * 220), 220))
width, height = problem.size
for i in range(0, width):
for j in range(0, height):
if problem.getpixel((i, j)) != (255, 255, 255):
background.putpixel((i + 40, j + 40), (43, 33, 110))
background.show()
background.save("background_image.jpg")
效果预览图展示: