第1章: 初识Pillow(PIL)
1.1 Pillow简介与历史
Pillow 是 Python 的图像处理库,由原始的 Python Imaging Library(PIL)发展而来。PIL 最早由 Fredrik Lundh 开发,是 Python 社区中用于图像处理的最早库之一。然而,PIL 的开发逐渐停滞,导致它与 Python 的新版本不兼容。为了弥补这一问题,Pillow 项目诞生了,它是 PIL 的一个分支,致力于在原有功能基础上进行改进并增加新特性,尤其是兼容 Python 3 的支持。
Pillow 的设计注重易用性和性能,使 Python 程序员能够轻松处理图像文件。它支持多种图像格式,如 JPEG、PNG、BMP、GIF、TIFF 等。Pillow 在图像处理中的广泛应用,使其成为许多 Python 项目中处理图像的首选工具。
1.2 Pillow与PIL的区别
虽然 Pillow 是 PIL 的派生库,但两者在功能和兼容性上有所不同。Pillow 进行了一些重要改进,使其成为更现代、更强大的图像处理库。以下是两者的主要区别:
- 兼容性:Pillow 支持 Python 3,而 PIL 仅支持 Python 2。
- 新特性:Pillow 增加了一些新功能,如 Alpha 通道支持、EXIF 数据处理、抗锯齿缩放等。
- 错误修复:Pillow 修复了 PIL 中许多已知的 Bug,性能更稳定。
- 更好的社区支持:Pillow 项目仍在积极维护,拥有更活跃的社区和丰富的资源。
1.3 安装与配置
安装 Pillow 十分简单,可以通过 Python 包管理工具 pip
安装。根据系统环境,安装方法可能略有不同。
1.3.1 基本安装
对于大多数用户,运行以下命令即可安装 Pillow:
pip install Pillow
1.3.2 系统依赖库
在某些系统上(例如 Linux),安装 Pillow 前需确保系统已安装一些依赖库,以支持特定的图像格式。可以按以下命令安装:
# Ubuntu/Debian 系统
sudo apt-get install python3-dev python3-pip libjpeg-dev libfreetype6-dev zlib1g-dev
# Red Hat/CentOS 系统
sudo yum install python3-devel python3-pip libjpeg-devel freetype-devel zlib-devel
安装依赖库后,再使用 pip install Pillow
安装即可。
1.4 Pillow的基本结构与模块概览
Pillow 包含许多模块,涵盖图像的读取、处理、变换和保存等常见操作。以下是一些重要模块:
- Image:核心模块,用于打开、保存和创建图像对象,是所有图像处理操作的基础。
- ImageDraw:提供绘图功能,用于在图像上绘制线条、形状和文本。
- ImageFont:管理字体,用于在图像上添加文本。
- ImageFilter:内置滤镜模块,支持模糊、锐化、轮廓等效果。
- ImageEnhance:增强模块,允许对图像进行亮度、对比度、颜色和锐度调整。
Pillow 的模块设计简洁,每个模块负责特定的图像处理任务。通过组合使用这些模块,可以实现丰富的图像处理效果。
1.5 Pillow的常见应用场景
Pillow 广泛应用于各类 Python 项目,尤其是在以下领域:
- 图像处理:对图像进行裁剪、缩放、旋转等基本操作。
- 图像增强:使用滤镜和增强功能对图像进行美化或风格化处理。
- 图像识别预处理:在机器学习和计算机视觉任务中,常用 Pillow 进行图像的预处理,如调整尺寸、灰度转换等。
- 水印与标记:添加水印、标记或文本,用于图像版权保护和信息标注。
- 批量处理:通过自动化脚本批量处理大量图像,实现高效的图像管理。
1.6 第一个Pillow程序:打开并显示图像
接下来,我们将编写第一个简单的 Pillow 程序,通过代码展示如何使用 Pillow 打开和显示图像。
-
安装好 Pillow 后,使用以下代码导入库并打开一张图像:
from PIL import Image # 打开图像 image = Image.open("example.jpg") # 显示图像 image.show()
在这段代码中,我们首先导入
Image
模块,然后使用Image.open()
函数加载本地图像文件"example.jpg"
。image.show()
函数用于在系统默认图像查看器中显示图像。 -
保存图像
Pillow 还支持将图像保存为不同格式:image.save("new_image.png")
上述代码将图像保存为 PNG 格式,格式自动识别,使用这种方式可以轻松进行图像格式的转换。
1.7 小结
在本章中,我们介绍了 Pillow 的历史、特点和安装方法,并通过一个简单的代码示例展示了 Pillow 的基础功能。