跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python Pillow 图像处理基础指南

Pillow 是 Python 图像处理的主流库,作为 PIL 的现代分支,支持多种格式读写及基础变换。其核心功能与应用场景,涵盖 Web 缩略图生成、数据预处理及自动化脚本等。通过实战代码演示了如何创建图像、绘制居中文字,并重点说明了新版 API 中 textbbox 的使用及字体加载的异常处理机制,帮助开发者快速上手图像操作。

魔尊发布于 2026/4/9更新于 2026/9/354 浏览

Pillow 简介

Pillow 是 Python 生态中处理图像的核心库,它是经典 PIL(Python Imaging Library)的现代分支。相比原版,Pillow 提供了更友好的安装体验和更好的兼容性。

借助它,你可以轻松完成以下任务:

  • 打开、操作和保存多种格式(JPEG, PNG, GIF, BMP, TIFF 等)
  • 基础变换:裁剪、旋转、调整尺寸
  • 图像增强:亮度、对比度、锐度调节
  • 滤镜效果:模糊、边缘检测
  • 像素级操作与文本绘制

常见应用场景

在实际开发中,Pillow 的身影无处不在:

  • Web 服务:动态生成缩略图、添加水印、生成验证码。
  • 数据科学:机器学习前的图像预处理,如统一尺寸、数据增强。
  • 桌面工具:构建简单的图片查看器或编辑器。
  • 自动化脚本:批量转换格式、为文件添加统一标识。
  • 视觉分析:提取特征,执行轻量级的计算机视觉任务。

环境准备

通过 pip 即可快速安装:

pip install pillow

如果网络较慢,可指定国内镜像源加速下载。

实战示例:创建图像并绘制文本

下面是一个完整的示例,演示如何创建一个空白图像,根据条件写入居中文字,并处理字体加载的异常情况。

这里有一个关键点需要注意:在较新版本的 Pillow 中,draw.textsize() 已被弃用,推荐使用 textbbox() 来计算文本边界,这样能避免兼容性问题。

from PIL import Image, ImageDraw, ImageFont

# 定义画布尺寸
width = 300
height = 150

# 设置颜色 (R, G, B)
background_color = (255, 255, 255)  # 白色背景
text_color = (0, 0, 0)              # 黑色文字

# 创建 RGB 模式图像
img = Image.new('RGB', (width, height), background_color)
draw = ImageDraw.Draw(img)

# 尝试加载系统字体,若失败则回退到默认字体
try:
    # Windows 用户通常使用 arial.ttf
    font_path = "arial.ttf"
    # Linux 用户可能需要类似 /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf
    # macOS 用户可能需要 /System/Library/Fonts/Supplemental/Arial Bold.ttf
    font = ImageFont.truetype(font_path, 20)
except IOError:
    print(f"警告:无法加载字体 '{font_path}',将使用默认字体。")
    font = ImageFont.load_default()

# 根据宽高比决定显示内容
if width > height:
    message = "Hello, Pillow!"
else:
    message = "Image dimensions are unusual."

# 计算文本位置以实现居中
# 注意:新版 Pillow 使用 textbbox 替代 textsize
bbox = draw.textbbox((0, 0), message, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]

x = (width - text_width) / 2
y = (height - text_height) / 2

# 绘制文本
draw.text((x, y), message, fill=text_color, font=font)

# 保存结果
output_filename = "pillow_example.png"
img.save(output_filename)
print(f"图像已保存为 {output_filename}")

# 调试时可取消注释以本地预览
# img.show()

运行上述代码后,你会看到控制台输出保存路径。如果系统中没有指定的字体文件,程序会自动降级使用内置字体,确保脚本不会崩溃。这种容错处理在生产环境中尤为重要。

目录

  1. Pillow 简介
  2. 常见应用场景
  3. 环境准备
  4. 实战示例:创建图像并绘制文本
  5. 定义画布尺寸
  6. 设置颜色 (R, G, B)
  7. 创建 RGB 模式图像
  8. 尝试加载系统字体,若失败则回退到默认字体
  9. 根据宽高比决定显示内容
  10. 计算文本位置以实现居中
  11. 注意:新版 Pillow 使用 textbbox 替代 textsize
  12. 绘制文本
  13. 保存结果
  14. 调试时可取消注释以本地预览
  15. img.show()

更多推荐文章

查看全部
  • Coze 工作流实战:逻辑控制、数据处理与 AIGC 多媒体应用
  • SpringBoot+Vue+Java 企业员工信息管理系统(含工资考勤)
  • Vue3 开发:JavaScript 与 TypeScript 选型对比
  • 贪心算法实战:从摆动序列到股票买卖
  • 前端面试题详解:ES6、跨域、Vue 及性能优化
  • Llama Factory 微调显存估算与云资源配置指南
  • 7 篇必读的大模型前沿论文精选
  • GPT、LLaMA 与 MOE:自回归模型与混合专家架构演进
  • 发送 Webhook 到飞书机器人
  • Ollama 快速部署大模型:Windows/Linux/Mac 通用教程
  • C++ 编程核心笔记:从基础语法到现代 C++ 实践
  • FLUX.1-dev FP8 量化技术解析:AI 绘画硬件优化实践
  • 自然语言处理在金融领域的应用与实战
  • Shannon:AI 驱动 Web 应用自动化渗透测试工具
  • SGI STL 空间配置器原理及 uninitialized 系列函数解析
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署、推理与微调实践
  • 飞算 JavaAI:智能编程助手助力 Java 高效开发
  • 前端存储机制:localStorage、sessionStorage 与 Cookie 对比
  • C++性能优化:提升代码执行效率的核心技巧
  • Java 环境配置与基础概念详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online