当前位置:首页>python>Python 图像处理之王,这一篇就够用了

Python 图像处理之王,这一篇就够用了

  • 2026-10-11 07:57:28
Python 图像处理之王,这一篇就够用了

Python 图像处理之王:Pillow 库函数全解析与实战指南

在 Python 的生态系统中,如果提到图像处理,Pillow(原名 PIL - Python Imaging Library)是开发者无可争议的首选。无论是简单的图片缩放、裁剪,还是复杂的滤镜处理、水印添加,Pillow 都能以简洁的 API 轻松实现。

本指南专为初学者设计,旨在通过系统化的逻辑,带你从零开始掌握 Pillow 的核心功能。

  1. 欢迎大家关注此公众号,后台点击按钮【免费资料】可免费获取【Python入门30节课】电子书

  1. 此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅,也感谢大家支持,我才有更新的动力


1. 前言:为什么选择 Pillow?

Pillow 是 Python 中最流行的图像处理库,它的特点包括:

  • • 易用性:函数命名直观,学习曲线平缓。
  • • 功能强大:支持超过 30 种图像格式(JPEG, PNG, GIF, BMP, WebP 等)。
  • • 高效性:底层基于 C 语言优化,处理速度快。

2. 环境准备

在开始之前,请确保你的电脑已安装 Python 环境。打开终端(Terminal 或 CMD),输入以下命令安装 Pillow:

pip install Pillow

安装完成后,可以在 Python 脚本中通过 from PIL import Image 来验证是否安装成功。


3. 核心功能解析:分步指南

我们将 Pillow 的功能分为四大模块:基础操作、几何变换、图像增强与滤镜、以及图像绘制。

3.1 基础操作:打开、查看与保存

一切图像处理的起点都是 Image 对象。

from PIL import Image

# 1. 打开图片
img = Image.open("example.jpg")

# 2. 获取图片信息
print(f"格式: {img.format}") # 例如: JPEG
print(f"尺寸: {img.size}")   # 例如: (1920, 1080)
print(f"模式: {img.mode}")   # 例如: RGB, RGBA, L (灰度)

# 3. 显示图片(调用系统默认查看器)
img.show()

# 4. 保存图片(可更改格式)
img.save("output.png", "PNG")

3.2 几何变换:裁剪、缩放与旋转

这是最常用的图像编辑功能。

  • • 裁剪 (Crop):需要传入一个元组 (左, 上, 右, 下)。
  • • 缩放 (Resize):改变图片分辨率。
  • • 旋转 (Rotate):按角度旋转。
# 裁剪:截取图片中间区域
# 坐标系以左上角为 (0,0)
box = (100, 100, 400, 400)
cropped_img = img.crop(box)

# 缩放:强制调整为 800x600
resized_img = img.resize((800, 600), Image.Resampling.LANCZOS)

# 旋转:逆时针旋转 45 度
rotated_img = img.rotate(45, expand=True) # expand=True 保证旋转后图像不被裁剪

# 翻转
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT) # 左右镜像

3.3 图像增强与滤镜 (ImageFilter)

Pillow 内置了多种滤镜,可以快速实现模糊、锐化等效果。

from PIL import ImageFilter

# 1. 转换为灰度图
gray_img = img.convert("L")

# 2. 高斯模糊
blur_img = img.filter(ImageFilter.GaussianBlur(radius=5))

# 3. 轮廓提取
contour_img = img.filter(ImageFilter.CONTOUR)

# 4. 细节增强
detail_img = img.filter(ImageFilter.DETAIL)

3.4 图像绘制与文字 (ImageDraw)

如果你需要在图片上画线、写字或加水印,ImageDraw 模块是核心。

from PIL import ImageDraw, ImageFont

# 创建一个空白画布 (RGB, 500x300, 白色背景)
canvas = Image.new("RGB", (500, 300), "white")
draw = ImageDraw.Draw(canvas)

# 画一条蓝色的线
draw.line((0, 0, 500, 300), fill="blue", width=5)

# 画一个红色的矩形
draw.rectangle((50, 50, 150, 150), outline="red", width=3)

# 写字 (需要指定字体文件路径,Windows通常在 C:/Windows/Fonts/)
# font = ImageFont.truetype("arial.ttf", 40)
# draw.text((200, 100), "Hello Pillow", fill="black", font=font)

canvas.show()

4. 实战案例:批量生成缩略图

在实际工作中,我们经常需要处理大量图片。以下代码演示了如何将一个文件夹内的所有图片压缩为缩略图:

import os
from PIL import Image

source_dir = "images/"
target_dir = "thumbnails/"
size = (128, 128)

ifnot os.path.exists(target_dir):
    os.makedirs(target_dir)

for filename in os.listdir(source_dir):
if filename.endswith((".jpg", ".png", ".jpeg")):
with Image.open(os.path.join(source_dir, filename)) as im:
            im.thumbnail(size) # 等比例缩放
            im.save(os.path.join(target_dir, "thumb_" + filename))
print(f"已处理: {filename}")

5. 初学者常踩的坑 (Common Pitfalls)

  1. 1. 坐标系统混淆:Pillow 的坐标系原点 (0, 0) 在左上角。x 轴向右增长,y 轴向下增长。
  2. 2. 对象不可变性:大多数 Pillow 操作(如 rotate, resize)不会修改原对象,而是返回一个新的 Image 对象。记得用变量接收返回值:img = img.rotate(90)。
  3. 3. 模式不匹配:保存 JPEG 时不能包含透明通道(RGBA)。如果你的图片是 RGBA 模式,保存为 JPG 前需要先转换:img.convert("RGB").save("file.jpg")。
  4. 4. 资源未释放:虽然 Python 有垃圾回收,但在处理数千张大图时,建议使用 with Image.open(...) as img: 语句确保文件句柄及时关闭。

6. 总结与进阶资源

通过本篇文章,你已经掌握了 Pillow 的核心逻辑:打开 -> 变换/处理 -> 保存。

学习建议:

  • • 官方文档:Pillow Documentation 是最权威的查阅手册。
  • • 练习方向:尝试自己写一个给图片自动添加日期水印的脚本,或者编写一个简单的验证码生成器。

Pillow 是图像处理的基石,掌握了它,未来学习更高级的计算机视觉库(如 OpenCV 或 TensorFlow)将会事半功倍。


如果你觉得这篇文章对你有帮助,欢迎点赞并关注!在图像处理的道路上,我们一同进步。

最新文章

随机文章