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()