大家好,今天我们来学习Pillow的相关知识,本文详解的讲解了使用Pillow库进行图片的简单处理,使用PyCharm开发Python的详细过程和各种第三方库的安装与使用。运用pillow来对图片进行处理,我们先介绍如何安装Pillow库和图象处理基本知识的介绍。本文会介绍如何透明度混合以及遮盖混合。
Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图像处理库。Pillow 库提供了对 Python3 的支持,为Python3 解释器提供了图像处理的功能。通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。
一、Pillow 库的安装
Pillow 库是Python开发者最为常见的图像处理库,它提供了广泛的文件格式支持、强大的图像处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等。 安装 Pillow 库的方法与安装 Python 其他第三方库的方法相同,也可以到 Python 官方网站下 载 Pillow 库的压缩包。
1.1 pip 安装 pillow
pip 安装 pillow,执行如下命令:
pip install pillow
二、图象处理基本知识
我们在学习pillow之前,我们首先需要了解图像的基本知识,比如说什么是图像的 RGB 色彩模式,什么是像素啊?
2.1 图像的 RGB 色彩模式
我们知道红色,绿色,蓝色是最基本的组成颜色,那么,顾名思义,RGB就是分别代表着三种颜色。RGB 三个颜色通道的变化和叠加得到各种颜色,其中
- R 红色,取值范围,0-255
- G 绿色,取值范围,0-255
- B 蓝色,取值范围,0-255
比如,我们常见的黄色就是由红色和绿色叠加而来。
红色的 RGB 表示(255,0,0) 绿色的 RGB 表示(0,255,0)
蓝色的 RGB 表示(0,0,255)黄色的 RGB 表示(255,255,0)
2.2 像素阵列
接下来,我们说说什么是像素,我们知道一个点就是像素,那么图片就可以像素的集合。
数字图像可以看成一个整数阵列,阵列中的元素称为像素(Pixel),见下图的数字阵列
每个点代表 1 个像素(Pixel),一个点包含 RGB 三种颜色。也就是 1 个像素包含 3 个字节的 信息:(R,G,B)。假如这个像素是红色,则信息是:(255,0,0)。那么,理论上我们只要 操作每个点上的这三个数字,就能实现任何的图形。一幅图像上的所有像素点的信息就完全 可以采用矩阵来表示,通过矩阵的运算实现更加复杂的操作。
三、Image 模块
Image模块是Pillow库的核心部分。它是用来存储所有类型的图像的主类,它还包含大量的函数方法,用于以各种方式处理图像。Image模块具有很多的功能,比如说
- 图像操作(旋转、转置等)
- 图像合成(混合等)
3.1 打开和新建
在 Pillow 库中,通过使用 Image 模块,可以从文件中加载图像,或者处理其他图像, 或者从 scratch 中创建图像。在对图像进行处理时,首先需要打开要处理的图片。在 Image 模块中使用函数 open()打开一副图片,执行后返回 Image 类的实例。当文件不存在时,会引 发 IOError 错误。使用函数 open()语法格式如下所示。
open(fp,mode)
- (1) fp:指打开文件的路径。
- (2) mode:可选参数,表示打开文件的方式,通常使用默认值 r。
在 Image 模块中,可以使用函数 new()新建图像。具体语法格式如下所示:
new(mode,size,color=0)
- (1) mode:图片模式,具体取值如下表
- (2) size:表示图片尺寸,是使用宽和高两个元素构成的元组
- (3) color:默认颜色(黑色)
Pillow 库支持的常用图片模式信息
mode(模式) | bands(通道) | 说明 |
"1" | 1 | 数字 1,表示黑白二值图像,每个像素用 0 或者 1 共 1 位二进制代 码表示 |
“L” | 1 | 灰度图,每个像素用 8 位二进制代码表示 |
"P" | 1 | 索引图,每个像素用 8 位二进制代码表示 |
【示例】使用 Image 打开打开一副图片
from PIL import Image img=Image.open('text.png') print('图片的格式:',img.format) print('图片的大小:',img.size) print('图片的高度:',img.height,'图片的宽度:',img.width) print('获取(100,100)处像素值:',img.getpixel((100,100)))
运行结果如下:
3.2 混合
在 Pillow 库的 Image 模块中,可以使用函数 blend()实现透明度混合处理。具体语法 格式如下所示:
blend(im1,im2,alpha)
其中 im1、im2 指参与混合的图片 1 和图片 2,alpha 指混合透明度,取值是 0-1。 通过使用函数 blend(),可以将 im1 和 im2 这两幅图片(尺寸相同)以一定的透明度 进行混合。具体混合过程如下:
(im1*(1-alpha)+im2*alpha)
当混合透明度为 0 时,显示 im1 原图。当混合透明度 alpha 取值为 1 时,显示 im2 原图片。
【示例】透明度混合图片
from PIL import Image img1=Image.open('1pqyq3.jpg').convert(mode='RGB') img2=Image.new('RGB',img1.size,'red') # img2.show() Image.blend(img1,img2,alpha=0.5).show()
运行效果如下:
- (2) 遮罩混合处理
在 Pillow 库中 Image 模块中,可以使用函数 composite()实现遮罩混合处理。具体语 法格式如下所示:
composite(im1,im2,mask)
其中 im1 和 im2 表示混合处理的图片 1 和图片 2.mask 也是一个图像,mode 可以为 “1”, “L”, or “RGBA”,并且大小要和 im1、im2 一样。 函数 composite()的功能是使用 mask 来混合图片 im1 和 im2,并且要求 mask、im1 和 im2 三幅图片的尺寸相同。下面的实例代码演示了使用 Image 模块实现图片遮罩混合处理的过程。
【示例】遮罩混合图片
from PIL import Image img1=Image.open('1pp5o1.jpg') img2=Image.open('1pp6e1.jpg') img2=img2.resize(img1.size) r,g,b=img2.split() Image.composite(img2,img1,b).show()
运行效果如下:
本次使用的图片为:
执行之后的效果如下:
我们可以惊喜的发现到两张图片混合到了一起,是不是很神奇,这个就是我们开头说的遮盖混合,感兴趣的快去试试吧。
四、 总结
通过本文的学习,我们简单操作了透明度混合以及遮盖混合,下一章,我们会继续介绍pillow的操作。我们可以通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。