Python 中的 Pillow 包

Manav Narula 2024年2月15日
  1. 在 Python 中使用 Pillow 包读取和显示图像
  2. Python 中使用 Pillow 包获取图片的属性
  3. 在 Python 中使用 Pillow 包编辑和处理图像
  4. 结论
Python 中的 Pillow 包

我们可以使用 Python 中的不同库来读取、处理和显示图像。在 2011 年弃用之前,我们拥有标准图像处理库 PIL(Python Imaging Library)包。

过了一段时间,引入了一个 Pillow 项目,它是原始 PIL 包的一个分支。该库包括对所有新图像格式的支持,并添加了新的解码器来处理这些新格式。

我们通过执行 pip install pillow 命令来安装这个库。

本教程将演示 Python 中 Pillow 库的基础知识。

在 Python 中使用 Pillow 包读取和显示图像

我们可以使用 open() 函数打开图像并将其存储在 PIL 类对象中。我们指定文件的路径并将其与 PIL.Image 对象一起使用。

使用 show() 函数,我们可以在 PIL.Image 对象中显示图像。在此之后,图像将存储在缓冲区中并转换为 PNG 格式以显示它。

请参阅下面的代码。

from PIL import Image

i = Image.open("image.png")
i.show()

输出:

使用 Pillow 读取和显示图像

在上面的示例中,我们使用 open() 函数读取图像并使用 show() 函数显示它。

Python 中使用 Pillow 包获取图片的属性

我们还可以使用 PIL.Image 对象获取不同的图像属性。

mode 属性说明由像素确定的加载图像的深度和类型。模式可以是 L(灰度)、P(映射到其他模式)、RGB 等。

例子:

from PIL import Image

i = Image.open("image.png")
print(i.mode)

输出:

RGBA

我们可以使用 convert() 函数将图像转换为不同的模式并指定其中的模式。

我们还可以分别使用 sizeformat 属性找到图像的大小和格式。

请参阅下面的代码。

from PIL import Image

i = Image.open("image.png")
print(i.size, i.format)

输出:

(640, 640) PNG

在 Python 中使用 Pillow 包编辑和处理图像

我们还可以使用 Pillow 包处理图像并对其进行编辑。它有一个名为 PIL.ImageFilter 的模块,用于存储不同的过滤器。

我们可以使用 filter() 函数将它们应用于图像,并在其中指定过滤器。

例子:

from PIL import Image, ImageFilter

i = Image.open("image.png")
edited = i.filter(ImageFilter.BLUR)
edited.show()

输出:

用 Pillow 对图像应用过滤器

在上面的示例中,我们使用 filter() 函数中的 ImageFilter.BLUR 对图像进行模糊处理。

此外,这个包的 crop() 函数可以将图像裁剪到给定的尺寸。rotate() 函数可以将图像旋转给定的角度。

请参阅下面的代码。

from PIL import Image, ImageFilter

i = Image.open("image.png")
t = i.crop((100, 100, 350, 350))
edited = t.rotate(90)
edited.show()

输出:

使用 Pillow 裁剪和旋转图像

我们提到了裁剪图像的尺寸并将其旋转给定角度。

此外,save() 函数可以保存编辑后的图像。

我们在函数中提到了图像的路径和文件名。我们还应该在文件名中指定图像的格式。

例子:

from PIL import Image, ImageFilter

i = Image.open("image.png")
t = i.crop((100, 100, 350, 350))
edited = t.rotate(90)
edited.save("edited.png")

结论

最后,我们讨论了 Pillow 包的不同用途、它的历史、它是如何在 PIL 包之后出现的,以及在读取和处理图像中的一些主要用途。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相关文章 - Python Package