Pillow 常用模块与方法
Pillow 提供了丰富的功能,包括图像打开、编辑、保存、格式转换等。
本文将介绍 Pillow 的常用模块及方法,并提供简单的代码示例。
常用模块
| 模块名称 | 功能类别 | 核心功能 | 常用方法/属性 | 典型应用场景 |
|---|---|---|---|---|
| Image | 核心模块 | 基础图像操作 | open(), save(), resize(), crop(), rotate(), convert() | 图像加载/保存/尺寸调整/格式转换 |
| ImageDraw | 绘图模块 | 矢量图形绘制 | Draw(), line(), rectangle(), text(), ellipse() | 添加水印/绘制图形/标注图像 |
| ImageFont | 字体支持 | 文字渲染 | truetype(), load_default(), getsize() | 自定义文字样式/计算文字区域 |
| ImageFilter | 图像特效 | 滤镜处理 | BLUR, SHARPEN, EMBOSS, GaussianBlur() | 图片模糊/锐化/艺术效果 |
| ImageEnhance | 图像优化 | 质量增强 | Brightness(), Contrast(), Color(), Sharpness() | 亮度/对比度/饱和度调整 |
| ImageOps | 高级操作 | 自动化处理 | grayscale(), flip(), mirror(), invert() | 图像反相/镜像/强制灰度化 |
| ImageChops | 通道运算 | 数学运算 | add(), subtract(), multiply(), difference() | 图像合成/差异检测/蒙版处理 |
| ImageColor | 颜色系统 | 颜色转换 | getrgb(), getcolor(), colormap | HEX/RGB/HSL颜色转换 |
| ImageGrab | 屏幕捕获 | 截图功能 | grab(), grabclipboard() | 屏幕截图/剪贴板图像获取 |
| ImageStat | 数据分析 | 像素统计 | Stat(), extrema(), mean(), rms() | 图像色彩分析/亮度检测 |
| ImagePalette | 调色板 | 索引色管理 | new(), getcolor(), tobytes() | 8位色图像处理/GIF优化 |
| ImagePath | 路径处理 | 矢量路径 | Path(), getbbox(), compact() | 复杂形状绘制(需配合ImageDraw) |
| ImageSequence | 动态图像 | 帧处理 | Iterator(), all_frames() | GIF动画分解/多帧TIFF处理 |
| ImageMorph | 形态学 | 图像变形 | MorphOp(), apply(), get_on_pixels() | 图案膨胀/腐蚀/结构分析 |
| ImageShow | 图像预览 | 快速显示 | show(), register_viewer() | 调试时快速查看图像 |
| ImageTk | GUI集成 | Tkinter支持 | PhotoImage(), BitmapImage() | 在Tkinter界面显示图像 |
| ImageQt | GUI集成 | Qt支持 | ImageQt(), toqimage() | PyQt/PySide图像显示 |
| ExifTags | 元数据 | EXIF读取 | TAGS, GPSTAGS | 读取相机参数/GPS信息 |
| PSDraw | 打印输出 | PostScript | PSDraw(), begin_document() | 生成打印用矢量文件 |
| TiffTags | 元数据 | TIFF标签 | TIFFTAGS | 处理TIFF格式元数据 |
模块工作过程

高级处理组合:
- 特效制作:ImageFilter + ImageEnhance
- 图像分析:ImageStat + ImageChops
- GUI开发:ImageTk/ImageQt + ImageDraw
专业领域支持:
- 科学图像:TIFFTags + ImageSequence
- 打印出版:PSDraw + ImageColor
- 计算机视觉:ImageMorph + ImageOps
常用方法
PIL.Image 模块常用方法
| 方法 | 描述 | 示例 |
|---|---|---|
Image.open() |
打开图像文件 | img = Image.open("example.jpg") |
Image.save() |
保存图像文件 | img.save("output.png") |
Image.show() |
显示图像 | img.show() |
Image.resize() |
调整图像尺寸 | new_img = img.resize((200, 200)) |
Image.rotate() |
旋转图像 | rotated_img = img.rotate(45) |
Image.crop() |
裁剪图像 | cropped_img = img.crop((50, 50, 200, 200)) |
示例代码:
实例
from PIL import Image
# 打开图像
img = Image.open("example.jpg")
# 调整大小并保存
resized_img = img.resize((300, 300))
resized_img.save("resized_example.jpg")
# 旋转 90 度并显示
rotated_img = img.rotate(90)
rotated_img.show()
# 打开图像
img = Image.open("example.jpg")
# 调整大小并保存
resized_img = img.resize((300, 300))
resized_img.save("resized_example.jpg")
# 旋转 90 度并显示
rotated_img = img.rotate(90)
rotated_img.show()
PIL.ImageDraw 模块常用方法
| 方法 | 描述 | 示例 |
|---|---|---|
ImageDraw.Draw() |
创建绘图对象 | draw = ImageDraw.Draw(img) |
draw.line() |
绘制线条 | draw.line([(0, 0), (100, 100)], fill="red", width=2) |
draw.rectangle() |
绘制矩形 | draw.rectangle([(50, 50), (150, 150)], outline="blue", width=3) |
draw.text() |
绘制文本 | draw.text((10, 10), "Hello", fill="black") |
示例代码:
实例
from PIL import Image, ImageDraw
# 创建一个空白图像
img = Image.new("RGB", (300, 300), "white")
draw = ImageDraw.Draw(img)
# 绘制红色线条
draw.line([(0, 0), (300, 300)], fill="red", width=2)
# 绘制蓝色矩形
draw.rectangle([(50, 50), (250, 250)], outline="blue", width=3)
# 添加文本
draw.text((100, 100), "Hello Pillow!", fill="black")
# 保存图像
img.save("draw_example.png")
img.show()
# 创建一个空白图像
img = Image.new("RGB", (300, 300), "white")
draw = ImageDraw.Draw(img)
# 绘制红色线条
draw.line([(0, 0), (300, 300)], fill="red", width=2)
# 绘制蓝色矩形
draw.rectangle([(50, 50), (250, 250)], outline="blue", width=3)
# 添加文本
draw.text((100, 100), "Hello Pillow!", fill="black")
# 保存图像
img.save("draw_example.png")
img.show()
PIL.ImageFilter 模块常用方法
| 方法 | 描述 | 示例 |
|---|---|---|
ImageFilter.BLUR |
模糊滤镜 | img.filter(ImageFilter.BLUR) |
ImageFilter.CONTOUR |
轮廓滤镜 | img.filter(ImageFilter.CONTOUR) |
ImageFilter.SHARPEN |
锐化滤镜 | img.filter(ImageFilter.SHARPEN) |
示例代码:
实例
from PIL import Image, ImageFilter
# 打开图像
img = Image.open("example.jpg")
# 应用模糊滤镜
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.save("blurred_example.jpg")
# 应用锐化滤镜
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.show()
# 打开图像
img = Image.open("example.jpg")
# 应用模糊滤镜
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.save("blurred_example.jpg")
# 应用锐化滤镜
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.show()
点我分享笔记