1.1 Pillow 简介与安装


1.1 Pillow 简介与安装

本节摘要:Pillow 是 Python 图像处理的标准库级选择,是经典 PIL(Python Imaging Library)的现代继任者。本节讲清 Pillow 的来龙去脉,给出 pip 与 conda 两种安装方式、国内镜像源配置,以及安装后如何验证版本,帮助你三分钟搭好环境。

学习目标

阅读完本节,你应当能够:

  1. 说出 Pillow 与 PIL 的关系
  2. 用 pip 或 conda 安装 Pillow
  3. 配置国内镜像源解决下载慢的问题
  4. 用 Python 验证 Pillow 是否安装成功

问题与直觉:为什么是 Pillow

Python 里处理图像,绕不开 Pillow。但很多初学者第一反应是:为什么叫"枕头"?名字确实有点萌——Pillow 官方寓意是像枕头一样给你支撑,让你在图像处理里"安枕无忧"。

更重要的历史背景:Pillow 的前身是 PIL(Python Imaging Library),那是 Python 图像处理的鼻祖,功能强大,但开发在 2009 年左右就停滞了——旧版 Python 升级后它跟不上,出现了大量兼容问题。Pillow 项目接过了这个摊子,做了一件事:延续 PIL 的 API 风格,同时持续适配新 Python 版本。所以你在代码里写的是 from PIL import Image(保持旧习惯),但背后跑的是 Pillow(新的实现)。

关键直觉:"PIL 是历史,Pillow 是现在"。import 时写 PIL 是历史原因,装的却是 Pillow,二者在代码里不冲突。

核心原理:安装三步走

第一步:确认 Python 与 pip 就绪

打开终端,输入:

python --version pip --version

能看到版本号(如 Python 3.9.7pip 21.2.4)说明环境就绪。若系统同时装了 Python 2 和 3,可能要用 python3pip3 区分。

第二步:pip 安装

pip install pillow

或明确使用 Python 3:

pip3 install pillow

安装完成会看到类似 Successfully installed Pillow-x.y.z 的输出。Pillow 包名在 pip 里是小写 pillow,import 时是大写开头 PIL,别搞混。

第三步:验证版本

from PIL import Image print("Pillow 版本:", Image.__version__)

能打印出版本号(如 9.1.0)就说明装好了。这一步值得养成习惯——任何库装完先验证,避免"以为自己装了其实没装"的尴尬

工程实践要点:常见安装问题

问题 原因 解决办法
pip 命令找不到 pip 未加入环境变量 python -m pip install pillow
下载极慢 访问 PyPI 网络不稳 换国内镜像源
安装报编译错误 环境缺编译器 用预编译 wheel,避免源码编译
conda 用户冲突 环境管理混乱 conda install pillow

⚠️ 常见坑:不要把 Pillow 装进错误的 Python 环境。装了多个 Python(系统版、Anaconda、虚拟环境)时,pip 可能装到 A 环境、import 用的是 B 环境,结果报 ModuleNotFoundError。解决方案:用 python -m pip install pillow 确保装进当前 python 对应的环境。

💡 关键直觉:虚拟环境是 Python 项目的好习惯。每个项目独立环境,Pillow 装进项目虚拟环境,避免全局环境污染与版本冲突。

镜像源配置

国内网络访问 PyPI 经常慢,换清华镜像一行解决:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow

想长期生效,可配置 pip 默认源(在用户目录创建 pip.conf 或 pip.ini 写入源地址)。换源后下载速度往往提升一个数量级。

conda 用户

conda install pillow

conda 会自动解决依赖,适合 Anaconda/Miniconda 用户。注意 conda 与 pip 混用时可能出现环境不一致,建议固定用一种方式。

动手实验:你的第一个 Pillow 程序

装好环境后,跑一个最简程序验证全链路:

from PIL import Image # 生成一张 200x200 的红色图片 img = Image.new("RGB", (200, 200), "red") # 保存为 PNG img.save("red_box.png") # 打开验证 img2 = Image.open("red_box.png") print(img2.size, img2.mode)

运行后你会看到 (200, 200) RGB 的输出,目录下多了一个 red_box.png从创建、保存到重新打开,整个闭环跑通了——这就是图像处理的最小可运行示例,后面的所有内容都是在这个闭环上扩展。

💡 关键直觉:图像处理学习的最佳节奏是"先跑通最小示例,再逐步加复杂度"。每学一个新功能,都在这个闭环上加一步,而不是从零开始造新程序。

Pillow 能做什么:能力地图

安装完成后,先建立"Pillow 到底能干什么"的整体认知,后面学起来才有方向。Pillow 的核心能力分六大块:

能力域 典型操作 章节
格式读写 打开/保存 30+ 种格式 1.2、3.4
几何变换 裁剪、缩放、旋转、翻转 1.4、2.6
颜色处理 模式转换、色彩调整、通道 1.5、2.1、2.4
滤镜特效 模糊、锐化、边缘、浮雕 2.2
绘图标注 形状、文字、水印 2.3
分析统计 直方图、像素统计、可视化 4.3

💡 关键直觉:Pillow 覆盖了"读、改、画、析"四件事。读是格式读写,改是几何与颜色,画是绘图标注,析是统计可视化。绝大多数日常图像需求,都在这四件事的范围内。

Pillow 的版本与兼容性

了解版本策略能避免不少坑:

版本节奏:Pillow 大约每 4-6 个月发布一个新版本,跟随 Python 的发布节奏。新版本会添加新格式支持、修复安全漏洞,建议保持较新的版本

Python 版本兼容:每个 Pillow 版本都声明支持的 Python 版本范围。老项目里"Pillow 装不上"多半是 Python 版本过旧或过新。装之前先看 python --version,再到官方发布页查对应支持范围。

查看版本的方法

from PIL import Image print(Image.__version__) # 代码内查看
pip show pillow # 命令行查看

⚠️ 常见坑:升级 Pillow 后行为变化。部分 API 在新版本有行为调整(如插值常量的位置变化、部分方法弃用)。生产项目升级 Pillow 前,建议在测试环境跑一遍用例,别直接上生产。

FAQ:安装相关高频问题

问:pip 和 pip3 有什么区别?
在只装了 Python 3 的环境里两者等价;如果系统同时有 Python 2,pip 可能指向 Python 2。不确定时统一用 python -m pip install pillow——它明确作用于当前 python 命令对应的环境。

问:为什么 import PIL 却显示 ModuleNotFoundError?
多半是"装错环境":pip 装到了 A 环境,import 用的解释器是 B 环境。用 python -m pip install pillow 再 import 试试;或用 IDE 的"使用项目虚拟环境"功能。

问:安装时报依赖冲突怎么办?
Pillow 依赖较少,冲突多发生在"全局环境装了很多包"时。推荐创建虚拟环境:python -m venv venv 然后激活,在里面安装——干净且可复现。

问:一定要用最新版吗?
不是。功能满足需求即可,但建议不低于次新版本——旧版本可能有未修复的安全漏洞(Pillow 历史上多次修复图片解析类漏洞)。

环境对比:不同系统的安装差异

Pillow 的安装在不同系统上有细微差异,提前知道能少踩坑:

系统 推荐方式 注意事项
Windows pip install pillow 自动下载预编译 wheel,无需编译环境
macOS pip install pillow 若用 Homebrew 的 Python,用 brew 装
Linux pip install pillow 部分发行版需 libjpeg/zlib 系统库
Anaconda conda install pillow 避免 pip/conda 混用

Windows 用户的特殊提醒:如果装的是"从源码编译版"(如 pip install 报缺少编译器),改用预编译 wheel 即可——Pillow 官方为各平台发布预编译包,一般不需要自己编译。

Linux 用户的特殊提醒:装 Pillow 报 libjpeg 相关错误时,先装系统库:sudo apt install libjpeg-dev zlib1g-dev(Debian/Ubuntu 系)或 sudo dnf install libjpeg-devel(Fedora 系)。多数情况下预编译 wheel 已内置依赖,报错通常是"用了系统 Python 而非虚拟环境"。

验证环境的完整脚本

把环境验证做成一个"健康检查"脚本,装完跑一遍心里有底:

# 环境健康检查脚本 import sys from PIL import Image, ImageFilter, ImageDraw def check(): # 1. 版本 print(f"Python: {sys.version.split()[0]}") print(f"Pillow: {Image.__version__}") # 2. 基础能力 img = Image.new("RGB", (10, 10), "red") print("创建图片: OK") # 3. 滤镜 img.filter(ImageFilter.BLUR) print("滤镜: OK") # 4. 绘图 draw = ImageDraw.Draw(img) draw.rectangle([(0, 0), (5, 5)], fill="blue") print("绘图: OK") # 5. 保存读取 img.save("_test.png") back = Image.open("_test.png") print(f"读写: OK ({back.format})") # 6. 格式支持 from PIL import features print(f"WebP 支持: {features.check('webp')}") print(f"JPEG 支持: {features.check('jpg')}") check()

这个脚本覆盖了 Pillow 的核心功能面:创建、滤镜、绘图、读写、格式支持。全 OK 说明环境可用;某一步失败,定位到具体环节再修

常见问题的快速排查树

遇到 Pillow 相关错误,先用一棵"排查树"定位问题方向:

报错了吗? ├─ ModuleNotFoundError: No module named 'PIL' │ └─ 没装 Pillow 或装错环境 → pip install pillow / 检查 python -m pip ├─ OSError: cannot identify image file │ └─ 文件不是图片或已损坏 → 换文件 / 检查路径 ├─ ValueError: image has wrong mode │ └─ 模式与操作不匹配 → 先 convert 到需要的模式 ├─ PermissionError: [WinError 32] │ └─ 文件被占用 → 用 with 管理 / 关闭占用进程 └─ MemoryError └─ 图片太大或对象累积 → 缩尺寸 / 用 with / 释放引用

排查思路:先看"哪个环节"(导入/打开/处理/保存),再看"什么类型"(缺依赖/模式错/文件问题)。把错误分类,比背错误信息更有效——第四章 4.4 有完整的错误排查清单。

为什么 Pillow 是学习图像处理的第一站

最后给一个"为什么从 Pillow 入门"的理由,坚定学习信心:

维度 Pillow 的优势
上手难度 API 直观,几分钟跑通第一个程序
生态地位 几乎所有图像库(numpy/OpenCV/PyTorch)都与它互转
覆盖范围 读存、处理、绘图、分析一应俱全
社区成熟 二十多年历史,文档完善、案例海量
学习价值 打好"图像=像素矩阵"的底子,后续学什么都快

一句话:Pillow 是图像处理领域的"Python 入门书"——简单但不浅薄,够用且能扩展。学完它,你既掌握了日常图像处理的能力,又拿到了进入整个图像生态的钥匙。

动手演练:安装与环境的最佳实践清单

最后给一份"从零到能跑"的完整行动清单,照着做即可:

  1. 检查 Python:python --version(建议 3.9+)
  2. 创建虚拟环境:python -m venv venv(Windows)或 python3 -m venv venv(macOS/Linux)
  3. 激活虚拟环境:venv\Scripts\activate(Windows)或 source venv/bin/activate(macOS/Linux)
  4. 安装 Pillow:pip install pillow(慢则加 `-i 「相关地址请参见官方文档」
  5. 验证:python -c "from PIL import Image; print(Image.__version__)"
  6. 跑通第一个程序(见第四节)

推荐理由:虚拟环境让项目互不污染,镜像源解决下载慢,验证命令确认安装成功——六步走完,环境就绪,不会再有"装了半天不能用"的烦恼。这也是后续所有章节的运行前提。

Pillow 的版本演进与选择建议

了解版本历史,选版本时有依据:

版本 发布时间 关键变化
8.x 2021 Resampling 枚举引入
9.x 2022 rounded_rectangle 等新 API
10.x 2023 移除旧弃用 API,性能提升
11.x 2024 新增格式支持,修复安全漏洞

选版本建议

  • 新项目用最新稳定版
  • 老项目升级前看"breaking changes"文档
  • 安全敏感环境保持最新(Pillow 多次修复图片解析漏洞)
  • pip install pillow==版本号 可锁定版本

判断"版本是否合适"的方法:查看 Image.__version__ 与官方发布说明对照。版本不是越高越好,而是"你的代码依赖的 API 是否被支持"——老代码用了 9.x 的 API,升到 11.x 要确认没被移除。

动手演练:环境问题诊断脚本

遇到"装不上/用不了"时,跑这个诊断脚本快速定位:

import sys import platform print("=== 环境诊断 ===") print(f"Python 版本: {sys.version}") print(f"系统: {platform.system()} {platform.release()}") try: import PIL print(f"Pillow 路径: {PIL.__file__}") from PIL import Image print(f"Pillow 版本: {Image.__version__}") except ImportError as e: print(f"Pillow 导入失败: {e}") print("→ 尝试: pip install pillow") # 检查格式支持(有些 Pillow 编译时缺少依赖) from PIL import features for fmt in ["jpg", "webp", "png", "gif", "tiff"]: print(f" {fmt:6s}: {'支持' if features.check(fmt) else '不支持'}") # 测试基本功能 try: img = Image.new("RGB", (10, 10), "red") img.save("_diag_test.png") print("基本读写: OK") import os os.remove("_diag_test.png") except Exception as e: print(f"基本读写失败: {e}")

诊断脚本的价值:一次跑完,输出"版本、路径、格式支持、基本功能"四个维度的状态——"先诊断、再解决"是环境问题的处理原则。格式支持检查尤其有用:某些系统装的 Pillow 缺少 libjpeg,JPG 处理会报错,这个检查能提前发现。

动手实验:Pillow 能做哪些事的快速体验

装好环境后,用一段"能力速览"代码快速体验 Pillow 的覆盖面:

from PIL import Image, ImageFilter, ImageEnhance, ImageDraw, ImageOps # 1. 创建 + 保存 img = Image.new("RGB", (300, 200), "lightblue") img.save("demo1.png") # 2. 打开 + 属性 img2 = Image.open("demo1.png") print(f"尺寸: {img2.size}, 模式: {img2.mode}") # 3. 滤镜 img3 = img.filter(ImageFilter.GaussianBlur(radius=5)) img3.save("demo2.png") # 4. 绘图 draw = ImageDraw.Draw(img) draw.ellipse([50, 30, 150, 130], fill="orange") img.save("demo3.png") # 5. 增强 bright = ImageEnhance.Brightness(img).enhance(1.5) bright.save("demo4.png") print("体验完成,查看 demo1-4.png")

体验的价值:5 个示例覆盖 Pillow 五大能力(创建/读写/滤镜/绘图/增强)——"快速体验全貌"比"深挖一个功能"更适合入门。跑完这段,你就对"Pillow 能做什么"有了整体印象,后续章节就是逐个深化。

图:Pillow 能力地图——读改画析四件事

图:Pillow 能力地图——读改画析四件事

要点速记

  • Pillow 是 PIL 的继任者:API 兼容,持续适配新 Python
  • import 写 PIL、安装写 pillow:历史包名与库名的差异
  • 安装验证三步:确认环境 → pip install → print 版本号
  • 镜像源:国内用户用清华镜像提速
  • 虚拟环境:独立环境避免版本冲突
  • 最小闭环:创建→保存→打开→验证,是学习的起点
  • 能力地图:读、改、画、析四件事
  • 版本意识:保持较新版本,升级前测试
  • 系统差异:Windows 免编译、Linux 查系统库、conda 别混用
  • 健康检查:一脚本验证 Pillow 全功能可用
  • 排查树:先分类错误再定位
  • 六步行动清单:环境就绪的标准流程
  • 版本演进:新项目用最新,老项目看兼容
  • 诊断脚本:版本/路径/格式/功能四维检查
  • 能力速览:5 示例覆盖五大能力
  • 生态入口:Pillow 是图像处理的第一站

环境就绪,下一节我们正式打开第一张真实图片,学 Image.open、save、show 的读写显示三连。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U