什么是 PIL/Pillow: Python 的图像处理库
Pillow(Python Imaging Library的分支)是Python的图像处理库,支持多种格式(如PNG、JPEG、GIF)的图像操作。其主要功能包括图像打开与保存、格式转换、调整大小、旋转、裁剪、亮度与对比度增强、滤镜应用(如模糊、锐化)、像素操作、图像合成及GIF处理等。安装通过pip install Pillow完成,兼容跨平台,API简单易用。Pillow广泛应用于Web开发(
·
PIL 是 Python Imaging Library 的缩写,也被称为 Pillow(PIL 的现代分支)。它是一个功能强大的 Python 库,用于处理和操作图像。
1. 什么是 PIL/Pillow?
- PIL 是 Python 的图像处理库,最初由 Fredrik Lundh 开发,广泛用于图像的打开、操作和保存。
- Pillow 是 PIL 的一个分支,因为原始 PIL 项目已停止维护(最后更新在 2009 年),Pillow 接管了开发,提供了更好的兼容性和更新支持。它是目前推荐使用的版本。
- Pillow 是一个开源库,兼容 Python 2.x 和 3.x,支持多种图像格式(如 PNG、JPEG、BMP、GIF 等)。
2. Pillow 的主要功能
Pillow 提供了丰富的图像处理功能,适用于从简单的图像操作到复杂的图像处理任务。以下是其主要功能:
图像操作
- 打开和保存图像:支持多种图像格式的读写。
from PIL import Image img = Image.open("example.jpg") # 打开图像 img.save("output.png") # 保存为其他格式 - 格式转换:可以在不同图像格式之间转换(如 JPEG 转 PNG)。
- 获取图像信息:如大小、分辨率、格式等。
print(img.size) # 输出图像尺寸 (宽度, 高度) print(img.format) # 输出图像格式
图像变换
- 调整大小:
img_resized = img.resize((100, 100)) # 调整为 100x100 像素 - 旋转和翻转:
img_rotated = img.rotate(90) # 旋转 90 度 img_flipped = img.transpose(Image.FLIP_LEFT_RIGHT) # 水平翻转 - 裁剪:
img_cropped = img.crop((100, 100, 400, 400)) # 裁剪指定区域
图像增强
- 调整亮度、对比度等:
使用ImageEnhance模块。from PIL import ImageEnhance enhancer = ImageEnhance.Brightness(img) img_bright = enhancer.enhance(1.5) # 增加亮度 - 滤镜效果:如模糊、锐化、边缘检测等。
from PIL import ImageFilter img_blurred = img.filter(ImageFilter.BLUR) # 应用模糊滤镜
像素操作
- 逐像素操作:可以直接访问和修改图像的像素值。
pixels = img.load() # 获取像素数据 pixels[0, 0] = (255, 0, 0) # 将 (0,0) 像素设为红色 - 颜色模式转换:如 RGB 转灰度。
img_gray = img.convert("L") # 转换为灰度图像
图像合成
- 合并图像:将多张图像合成到一起。
img.paste(img2, (50, 50)) # 将 img2 粘贴到 img 的 (50,50) 位置 - 添加文本:使用
ImageDraw模块在图像上绘制文本或图形。from PIL import ImageDraw, ImageFont draw = ImageDraw.Draw(img) draw.text((10, 10), "Hello, PIL!", fill=(255, 0, 0)) # 绘制红色文本
支持动画和多帧图像
- 处理 GIF 或多帧图像:
gif = Image.open("animation.gif") gif.seek(1) # 跳转到第 2 帧
3. 安装 Pillow
Pillow 可以通过 pip 安装:
pip install Pillow
确保使用的是最新版本(截至 2025 年 10 月,最新版本可能是 10.x 系列)。可以用以下命令检查版本:
pip show Pillow
4. 常用场景
- Web 开发:生成缩略图、处理用户上传的图片。
- 数据科学:预处理图像数据(如计算机视觉任务)。
- 自动化脚本:批量处理图像(调整大小、格式转换等)。
- 图形设计:创建或编辑简单的图像、添加水印等。
5. Pillow 的优点
- 跨平台:支持 Windows、macOS、Linux。
- 轻量且易用:API 简单,适合初学者和专业开发者。
- 广泛兼容:支持多种图像格式,易于与其他库(如 NumPy、OpenCV)集成。
- 活跃维护:Pillow 社区活跃,定期更新。
6. 局限性
- 性能:对于大规模图像处理(如深度学习中的批量处理),Pillow 可能不如 OpenCV 高效。
- 功能深度:Pillow 适合通用图像处理,但对于高级计算机视觉任务,推荐使用 OpenCV 或 TensorFlow。
- 依赖外部库:某些功能(如处理特定格式)可能需要安装额外的系统库(如 libjpeg、libpng)。
7. 与其他图像处理库的对比
- Pillow vs OpenCV:
- Pillow 更适合简单的图像处理任务,API 更直观。
- OpenCV 更适合高性能的计算机视觉任务(如目标检测、图像分割)。
- Pillow vs Matplotlib:
- Pillow 专注于图像处理,Matplotlib 更适合数据可视化和显示图像。
- Pillow vs NumPy:
- Pillow 提供高级图像操作接口,NumPy 更适合低级像素数据操作。
8. 示例代码:简单图像处理
以下是一个综合示例,展示如何使用 Pillow 进行基本图像处理:
from PIL import Image, ImageEnhance, ImageFilter
# 打开图像
img = Image.open("example.jpg")
# 调整大小
img_resized = img.resize((200, 200))
# 增加亮度
enhancer = ImageEnhance.Brightness(img_resized)
img_bright = enhancer.enhance(1.2)
# 应用模糊滤镜
img_blurred = img_bright.filter(ImageFilter.BLUR)
# 保存结果
img_blurred.save("processed_image.png")
9. 资源与学习
- 官方文档:Pillow 的官方文档(https://pillow.readthedocs.io/)提供了详细的 API 说明和示例。
- 社区资源:GitHub 上的 Pillow 项目(https://github.com/python-pillow/Pillow)包含源码和问题讨论。
- 教程:可以在 PyImageSearch、Real Python 或 YouTube 上找到大量 Pillow 使用教程。
10. 注意事项
- 兼容性:确保安装的 Pillow 版本与 Python 版本兼容。
- 文件路径:处理文件时注意路径的正确性,建议使用
os.path或pathlib管理路径。 - 内存管理:处理大图像或批量图像时,注意内存使用,及时关闭图像(
img.close())。
更多推荐



所有评论(0)