Python 的 Pillow 库(原名为 PIL
,现为 Pillow
)是一个强大的图像处理库,支持多种图像格式的读写、编辑和增强。以下是 Pillow 中常用模块和方法的详细说明及实际场景示例:
1. Image 模块:核心图像操作
Image
模块是 Pillow 的核心,提供图像的打开、保存、基础操作(裁剪、旋转、缩放等)。
常用方法及示例
-
open()
- 打开图像文件from PIL import Image img = Image.open("input.jpg") # 打开图像
-
save()
- 保存图像img.save("output.png") # 保存为 PNG 格式
-
resize()
- 调整图像大小
场景:生成缩略图thumbnail_size = (100, 100) resized_img = img.resize(thumbnail_size) resized_img.save("thumbnail.jpg")
-
crop()
- 裁剪图像
场景:截取图片中的某一部分# 参数:(left, upper, right, lower) box = (50, 50, 200, 200) cropped_img = img.crop(box) cropped_img.save("cropped.jpg")
-
rotate()
- 旋转图像
场景:矫正图片方向rotated_img = img.rotate(45) # 旋转45度 rotated_img.save("rotated.jpg")
-
convert()
- 转换图像模式
场景:将图片转为灰度图gray_img = img.convert("L") # L 表示灰度模式 gray_img.save("gray.jpg")
2. ImageDraw 模块:图像绘制
ImageDraw
用于在图像上绘制形状、文字。
常用方法及示例
-
rectangle()
- 绘制矩形
场景:在图片上标记区域from PIL import Image, ImageDraw draw = ImageDraw.Draw(img) draw.rectangle([(10, 10), (100, 100)], outline="red", width=2) img.save("marked.jpg")
-
text()
- 添加文字
场景:添加水印from PIL import ImageFont font = ImageFont.truetype("arial.ttf", 20) # 加载字体 draw.text((10, 10), "Watermark", fill="white", font=font) img.save("watermarked.jpg")
3. ImageFilter 模块:图像滤镜
ImageFilter
提供多种滤镜效果。
常用方法及示例
-
GaussianBlur
- 高斯模糊
场景:模糊敏感信息from PIL import ImageFilter blurred_img = img.filter(ImageFilter.GaussianBlur(radius=5)) blurred_img.save("blurred.jpg")
-
FIND_EDGES
- 边缘检测
场景:提取图像轮廓edges_img = img.filter(ImageFilter.FIND_EDGES) edges_img.save("edges.jpg")
4. ImageEnhance 模块:图像增强
ImageEnhance
提供调整亮度、对比度、色彩饱和度等功能。
常用方法及示例
-
Brightness
- 调整亮度
场景:修复过暗的图片from PIL import ImageEnhance enhancer = ImageEnhance.Brightness(img) bright_img = enhancer.enhance(1.5) # 1.5 倍亮度 bright_img.save("bright.jpg")
-
Contrast
- 调整对比度
场景:增强图像细节enhancer = ImageEnhance.Contrast(img) contrast_img = enhancer.enhance(2.0) # 2 倍对比度 contrast_img.save("contrast.jpg")
5. ImageColor 模块:颜色处理
ImageColor
用于颜色值转换。
示例
from PIL import ImageColor
color_rgb = ImageColor.getrgb("#FF0000") # 将 HEX 转为 RGB 元组 (255, 0, 0)
6. 实际场景综合示例
场景:将多张图片拼接为一张长图
def concat_images_vertically(image_paths, output_path):
images = [Image.open(path) for path in image_paths]
widths, heights = zip(*(i.size for i in images))
total_height = sum(heights)
max_width = max(widths)
new_img = Image.new("RGB", (max_width, total_height))
y_offset = 0
for img in images:
new_img.paste(img, (0, y_offset))
y_offset += img.height
new_img.save(output_path)
concat_images_vertically(["1.jpg", "2.jpg"], "combined.jpg")
总结
Pillow 的功能覆盖图像处理的绝大多数需求,包括:
- 基础操作:打开、保存、裁剪、旋转、缩放。
- 图像增强:亮度、对比度、滤镜。
- 绘图功能:添加形状、文字、水印。
- 格式转换:支持 JPEG、PNG、GIF、BMP 等格式。
通过组合这些方法,可以实现自动化图片处理、生成报告图表、批量添加水印等复杂任务。