PIL(Python Imaging Library) 是 Python 中经典的图像处理库,用于打开、操作和保存多种图像格式(如 JPEG、PNG、BMP、GIF 等)。虽然原版 PIL 已停止维护,但其分支 Pillow 兼容并扩展了 PIL 的功能,成为现代 Python 图像处理的标准库。以下是核心概念和常用函数的详解:
图像对象 (Image
类)
所有图像操作基于 Image
对象,通过 Image.open()
加载图像后,可以对其进行裁剪、缩放、旋转、滤镜处理等操作。
图像模式
图像数据以不同模式存储,如:
RGB
(红绿蓝三通道)
RGBA
(RGB + 透明度)
L
(灰度图)
1
(二值图,黑白)
坐标系统
左上角为原点 (0, 0)
,向右为 x 轴正方向,向下为 y 轴正方向。
Image
模块(图像基础操作)函数/方法 | 功能 | 示例 |
---|---|---|
Image.open(filepath) |
打开图像文件并返回 Image 对象 |
img = Image.open("image.jpg") |
img.save(filepath, format) |
保存图像(可指定格式) | img.save("output.png", "PNG") |
img.resize((width, height)) |
调整图像尺寸 | img_resized = img.resize((800, 600)) |
img.crop((left, top, right, bottom)) |
裁剪图像区域(矩形坐标) | img_cropped = img.crop((100, 100, 400, 300)) |
img.rotate(angle) |
旋转图像(逆时针角度) | img_rotated = img.rotate(45) |
img.convert(mode) |
转换图像模式(如 RGB→L) | gray_img = img.convert("L") |
img.thumbnail((max_w, max_h)) |
生成缩略图(保持比例) | img.thumbnail((200, 200)) |
img.paste(img2, position) |
将另一图像粘贴到当前图像 | img.paste(img2, (50, 50)) |
ImageDraw
模块(绘图功能)用于在图像上绘制几何图形或文字:
from PIL import Image, ImageDraw
# 创建绘图对象
draw = ImageDraw.Draw(img)
# 常用方法
draw.rectangle((x1, y1, x2, y2), fill="red") # 绘制矩形
draw.text((x, y), "Hello", fill="white") # 绘制文字
draw.line((x1, y1, x2, y2), fill="blue") # 绘制线段
ImageFilter
模块(图像滤镜)应用预定义滤镜增强或处理图像:
from PIL import ImageFilter
# 常用滤镜
img_blur = img.filter(ImageFilter.BLUR) # 模糊
img_sharp = img.filter(ImageFilter.SHARPEN) # 锐化
img_edges = img.filter(ImageFilter.FIND_EDGES) # 边缘检测
ImageEnhance
模块(图像增强)调整亮度、对比度、色彩饱和度等:
from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(img)
img_brighter = enhancer.enhance(1.5) # 亮度提升50%
enhancer = ImageEnhance.Contrast(img)
img_contrast = enhancer.enhance(2.0) # 对比度翻倍
图像信息获取:
print(img.format) # 格式(JPEG, PNG等)
print(img.size) # 尺寸(宽, 高)
print(img.mode) # 模式(RGB, L等)
img.seek(frame_index) # 跳转到指定帧
图像预处理:调整尺寸、裁剪、灰度化(用于机器学习)。
生成水印:叠加文字或 Logo。
批量处理:格式转换、重命名、滤镜应用。
数据可视化:绘制图表并合成到图像中。
安装 Pillow:
pip install Pillow
注意:
处理大图像时可能占用较多内存。
修改图像后需调用 save()
保存,否则不会自动写入文件。
不同图像格式支持的模式不同(如 JPEG 不支持透明通道)。
from PIL import Image, ImageDraw, ImageFont
# 打开图像并调整大小
img = Image.open("input.jpg")
img = img.resize((800, 600))
# 绘制文字水印
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 36)
draw.text((10, 10), "Watermark", fill="yellow", font=font)
# 应用滤镜并保存
img = img.filter(ImageFilter.SHARPEN)
img.save("output.png", "PNG")
掌握 PIL/Pillow 后,可以轻松实现自动化图像处理任务!
祝大家学的愉快!!!