Pillow 常用模块与方法 全景速查表
一篇掌握 90% 日常使用场景 的 Pillow 核心 API
1. 核心模块一览
| 模块 | 功能 | 常用类/函数 |
|---|
PIL.Image | 图像打开、保存、转换 | open(), Image 类 |
PIL.ImageDraw | 绘图(线、形、文字) | ImageDraw.Draw() |
PIL.ImageFont | 加载字体(支持中文) | truetype(), load_default() |
PIL.ImageFilter | 滤镜(模糊、锐化等) | BLUR, SHARPEN, FIND_EDGES |
PIL.ImageEnhance | 增强(亮度、对比度) | Contrast, Brightness |
PIL.ImageOps | 快速操作(翻转、灰度) | flip(), grayscale() |
PIL.ImageChops | 通道运算(叠加、差分) | add(), subtract() |
PIL.ImageTk | 与 tkinter 集成 | PhotoImage |
2. Image 模块 核心方法
| 方法 | 说明 | 示例 |
|---|
Image.open(path) | 打开图像 | img = Image.open("a.jpg") |
img.save(path, quality=95) | 保存 | img.save("b.png") |
img.convert("L") | 转灰度 | gray = img.convert("L") |
img.resize((w,h)) | 缩放 | img.resize((800,600)) |
img.thumbnail((w,h)) | 等比缩放(推荐) | img.thumbnail((400,400)) |
img.crop((l,t,r,b)) | 裁剪 | img.crop((100,100,500,400)) |
img.rotate(90, expand=True) | 旋转 | img.rotate(45) |
img.transpose(FLIP_LEFT_RIGHT) | 翻转 | img.transpose(Image.FLIP_TOP_BOTTOM) |
img.show() | 显示(调试用) | img.show() |
3. ImageDraw 绘图方法
from PIL import ImageDraw
draw = ImageDraw.Draw(img)
| 方法 | 说明 | 示例 |
|---|
draw.text((x,y), "文字", font=font, fill=color) | 写文字 | draw.text((50,50), "Hello", fill="red") |
draw.rectangle([x1,y1,x2,y2], fill=, outline=) | 画矩形 | draw.rectangle([100,100,300,200], outline="blue", width=3) |
draw.line([x1,y1,x2,y2], fill=, width=) | 画线 | draw.line([0,0,200,200], fill="green", width=5) |
draw.ellipse([x1,y1,x2,y2], fill=, outline=) | 画圆/椭圆 | draw.ellipse([50,50,150,150], fill="yellow") |
draw.polygon([(x1,y1),...], fill=) | 画多边形 | draw.polygon([(100,100),(200,50),(300,100)], fill="purple") |
4. ImageFont 字体加载
from PIL import ImageFont
| 方法 | 说明 |
|---|
ImageFont.truetype("simhei.ttf", 36) | 加载 TTF 字体(支持中文) |
ImageFont.load_default() | 默认字体(不支持中文) |
中文必用:truetype("simhei.ttf", size)
5. ImageFilter 滤镜
from PIL import ImageFilter
| 滤镜 | 效果 |
|---|
ImageFilter.BLUR | 模糊 |
ImageFilter.GaussianBlur(radius=5) | 高斯模糊 |
ImageFilter.SHARPEN | 锐化 |
ImageFilter.EDGE_ENHANCE | 边缘增强 |
ImageFilter.FIND_EDGES | 边缘检测 |
ImageFilter.EMBOSS | 浮雕 |
blurred = img.filter(ImageFilter.GaussianBlur(10))
6. ImageEnhance 图像增强
from PIL import ImageEnhance
| 增强器 | 说明 | 示例 |
|---|
ImageEnhance.Brightness(img) | 亮度 | .enhance(1.5) |
ImageEnhance.Contrast(img) | 对比度 | .enhance(2.0) |
ImageEnhance.Color(img) | 饱和度 | .enhance(0.0) → 灰度 |
ImageEnhance.Sharpness(img) | 锐度 | .enhance(3.0) |
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(1.8) # 提高对比度
7. ImageOps 快速操作
from PIL import ImageOps
| 方法 | 说明 |
|---|
ImageOps.grayscale(img) | 转灰度 |
ImageOps.invert(img) | 反色 |
ImageOps.flip(img) | 上下翻转 |
ImageOps.mirror(img) | 左右翻转 |
ImageOps.equalize(img) | 直方图均衡化 |
gray = ImageOps.grayscale(img)
8. ImageChops 通道运算
from PIL import ImageChops
| 方法 | 说明 |
|---|
ImageChops.add(img1, img2) | 像素相加 |
ImageChops.subtract(img1, img2) | 相减 |
ImageChops.difference(img1, img2) | 差异图 |
ImageChops.screen(img1, img2) | 滤色混合 |
diff = ImageChops.difference(img1, img2)
9. 图像模式(Mode)速查
| 模式 | 说明 |
|---|
"L" | 灰度(8位) |
"RGB" | 真彩色 |
"RGBA" | 带透明通道 |
"1" | 二值(黑白) |
"P" | 调色板(256色) |
"CMYK" | 印刷四色 |
img.mode # 查看
img = img.convert("RGBA") # 转换
10. 常用常量
from PIL import Image
Image.FLIP_LEFT_RIGHT
Image.FLIP_TOP_BOTTOM
Image.ROTATE_90
Image.ROTATE_180
Image.ROTATE_270
Image.LANCZOS # 高质量缩放滤波器
实战代码模板(复制即用)
from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageEnhance
# 1. 打开
img = Image.open("input.jpg").convert("RGB")
# 2. 缩放 + 高质量
img = img.resize((800, 600), Image.LANCZOS)
# 3. 增强对比度
img = ImageEnhance.Contrast(img).enhance(1.5)
# 4. 添加文字(中文)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("simhei.ttf", 48)
draw.text((50, 50), "Pillow 牛逼!", font=font, fill=(255, 0, 0))
# 5. 添加滤镜
img = img.filter(ImageFilter.SHARPEN)
# 6. 保存
img.save("output.jpg", quality=95)
推荐字体路径(中文)
| 系统 | 路径 |
|---|
| Windows | C:/Windows/Fonts/simhei.ttf |
| macOS | /System/Library/Fonts/PingFang.ttc |
| Linux | /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc |
官方文档速联
一张图记住 80% 用法
Image.open()
→ .convert() → .resize() → .crop() → .rotate()
→ ImageDraw.Draw() → .text() / .rectangle()
→ .filter() → .save()
总结:
Pillow = 图像处理瑞士军刀
掌握 Image, ImageDraw, ImageFont, ImageFilter → 无敌!
需要我为你生成 PDF 速查卡 或 交互式 Jupyter Notebook 吗?
欢迎继续提问!
This clarifies a lot of my confusion on the topic.