大家好,今天我们来学习Pillow的相关知识,本文详解的讲解了使用Pillow库进行图片的简单处理,使用PyCharm开发Python的详细过程和各种第三方库的安装与使用。运用pillow来对图片进行处理,我们先介绍如何安装Pillow库和图象处理基本知识的介绍。本文会介绍如何透明度混合以及遮盖混合。
Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图像处理库。Pillow 库提供了对 Python3 的支持,为Python3 解释器提供了图像处理的功能。通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。
目录
一、Pillow 库的安装
1.1 pip 安装 pillow
二、图象处理基本知识
2.1 图像的 RGB 色彩模式
2.2 像素阵列
三、Image 模块
3.1 打开和新建
【示例】使用 Image 打开打开一副图片
运行结果如下:
3.2 混合
(1) 透明度混合处理
【示例】透明度混合图片
运行效果如下:
(2) 遮罩混合处理
【示例】遮罩混合图片
运行效果如下:
四、 总结
Pillow 库是Python开发者最为常见的图像处理库,它提供了广泛的文件格式支持、强大的图像处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等。 安装 Pillow 库的方法与安装 Python 其他第三方库的方法相同,也可以到 Python 官方网站下 载 Pillow 库的压缩包。
pip 安装 pillow,执行如下命令:
pip install pillow
我们在学习pillow之前,我们首先需要了解图像的基本知识,比如说什么是图像的 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)
接下来,我们说说什么是像素,我们知道一个点就是像素,那么图片就可以像素的集合。
数字图像可以看成一个整数阵列,阵列中的元素称为像素(Pixel),见下图的数字阵列
每个点代表 1 个像素(Pixel),一个点包含 RGB 三种颜色。也就是 1 个像素包含 3 个字节的 信息:(R,G,B)。假如这个像素是红色,则信息是:(255,0,0)。那么,理论上我们只要 操作每个点上的这三个数字,就能实现任何的图形。一幅图像上的所有像素点的信息就完全 可以采用矩阵来表示,通过矩阵的运算实现更加复杂的操作。
Image模块是Pillow库的核心部分。它是用来存储所有类型的图像的主类,它还包含大量的函数方法,用于以各种方式处理图像。Image模块具有很多的功能,比如说
图像操作(旋转、转置等)
图像合成(混合等)
在 Pillow 库中,通过使用 Image 模块,可以从文件中加载图像,或者处理其他图像, 或者从 scratch 中创建图像。在对图像进行处理时,首先需要打开要处理的图片。在 Image 模块中使用函数 open()打开一副图片,执行后返回 Image 类的实例。当文件不存在时,会引 发 IOError 错误。使用函数 open()语法格式如下所示。
open(fp,mode)
在 Image 模块中,可以使用函数 new()新建图像。具体语法格式如下所示:
new(mode,size,color=0)
mode(模式) | bands(通道) | 说明 |
"1" | 1 | 数字 1,表示黑白二值图像,每个像素用 0 或者 1 共 1 位二进制代 码表示 |
“L” | 1 | 灰度图,每个像素用 8 位二进制代码表示 |
"P" | 1 | 索引图,每个像素用 8 位二进制代码表示 |
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)))
在 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()
在 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 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。