上一篇
Python PIL库教程:图像处理入门到实战 - 深度求索
- Python
- 2025-08-13
- 1418
Python PIL库图像处理完全指南
作者:深度求索
2023年10月15日
1. PIL库简介
Python Imaging Library (PIL) 是Python中最受欢迎的图像处理库之一。尽管原始PIL项目已停止维护,但其分支库Pillow提供了更好的兼容性和更多功能,已成为Python图像处理的事实标准。
PIL/Pillow的主要功能:
- 图像打开、保存和格式转换
- 基本图像操作:裁剪、旋转、缩放
- 颜色空间转换
- 图像增强:滤镜、对比度调整
- 文字和图形绘制
- 图像分析:直方图、像素操作
2. 安装与环境配置
安装Pillow非常简单,使用pip命令即可:
pip install pillow
安装完成后,可以使用以下代码验证安装:
from PIL import Image # 打印Pillow版本 print(Image.__version__)
注意事项:
- Pillow支持多种图像格式:JPEG, PNG, BMP, TIFF等
- 在Linux系统上可能需要额外安装图像库:
sudo apt-get install libjpeg-dev zlib1g-dev
- 建议在虚拟环境中安装
3. 基础图像操作
3.1 打开和显示图像
from PIL import Image # 打开图像 img = Image.open('example.jpg') # 显示图像 img.show()
3.2 获取图像信息
# 获取图像格式 print(img.format) # 输出: JPEG # 获取图像尺寸 print(img.size) # 输出: (宽度, 高度) # 获取图像模式 print(img.mode) # 输出: RGB (或其他模式如L, CMYK)
3.3 保存图像
# 保存为不同格式 img.save('output.png') # 保存为PNG格式 img.save('output.webp') # 保存为WebP格式 # 指定质量参数(JPEG) img.save('high_quality.jpg', quality=95)
4. 图像处理技术
4.1 调整图像大小
# 调整尺寸 resized_img = img.resize((400, 300)) # 保持宽高比调整大小 img.thumbnail((800, 800)) # 最大尺寸为800px
4.2 裁剪图像
# 定义裁剪区域 (left, upper, right, lower) box = (100, 100, 500, 400) cropped_img = img.crop(box)
4.3 旋转图像
# 旋转45度 rotated_img = img.rotate(45) # 旋转并填充背景色 rotated_img = img.rotate(30, expand=True, fillcolor=(255, 0, 0))
4.4 应用滤镜
from PIL import ImageFilter # 模糊滤镜 blurred = img.filter(ImageFilter.BLUR) # 边缘增强 edge_enhanced = img.filter(ImageFilter.EDGE_ENHANCE) # 轮廓滤镜 contour = img.filter(ImageFilter.CONTOUR) # 自定义卷积核 kernel = ImageFilter.Kernel((3, 3), [0, -1, 0, -1, 5, -1, 0, -1, 0]) custom_filter = img.filter(kernel)
5. 高级图像操作
5.1 图像合成
# 打开两张图片 img1 = Image.open('background.jpg') img2 = Image.open('foreground.png') # 将img2粘贴到img1上 (位置, 蒙版) img1.paste(img2, (100, 50), img2)
5.2 绘制图形和文字
from PIL import ImageDraw, ImageFont # 创建绘图对象 draw = ImageDraw.Draw(img) # 绘制矩形 draw.rectangle([(100, 100), (300, 300)], outline="red", width=3) # 绘制文本 font = ImageFont.truetype("arial.ttf", 40) draw.text((150, 350), "Hello PIL!", fill="blue", font=font)
5.3 颜色空间转换
# 转换为灰度图 gray_img = img.convert('L') # 转换为CMYK cmyk_img = img.convert('CMYK') # 分离RGB通道 r, g, b = img.split()
6. 实际应用案例
6.1 创建缩略图
def create_thumbnail(input_path, output_path, size=(200, 200)): try: img = Image.open(input_path) img.thumbnail(size) img.save(output_path) return True except Exception as e: print(f"Error: {e}") return False create_thumbnail('large_image.jpg', 'thumbnail.jpg')
6.2 批量处理图像
import os def batch_resize(input_folder, output_folder, size=(1024, 768)): if not os.path.exists(output_folder): os.makedirs(output_folder) for filename in os.listdir(input_folder): if filename.lower().endswith(('.png', '.jpg', '.jpeg')): input_path = os.path.join(input_folder, filename) output_path = os.path.join(output_folder, filename) try: img = Image.open(input_path) img.thumbnail(size) img.save(output_path) print(f"Processed: {filename}") except Exception as e: print(f"Failed to process {filename}: {e}") batch_resize('input_images', 'resized_images')
6.3 添加水印
def add_watermark(image_path, output_path, watermark_text, font_size=36): img = Image.open(image_path).convert("RGBA") # 创建水印层 txt = Image.new("RGBA", img.size, (255, 255, 255, 0)) draw = ImageDraw.Draw(txt) # 使用字体 try: font = ImageFont.truetype("arial.ttf", font_size) except: font = ImageFont.load_default() # 计算水印位置 text_width, text_height = draw.textsize(watermark_text, font) x = img.width - text_width - 20 y = img.height - text_height - 20 # 绘制半透明水印 draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128)) # 合并图像和水印 watermarked = Image.alpha_composite(img, txt) watermarked.convert("RGB").save(output_path) add_watermark('photo.jpg', 'watermarked.jpg', "© DeepSeek")
总结
Python的PIL库(Pillow)是一个功能强大且易于使用的图像处理库。通过本教程,您已经学习了:
- PIL库的安装和基本使用方法
- 图像打开、保存和格式转换
- 基础图像处理操作:调整大小、裁剪、旋转
- 滤镜应用和图像增强技术
- 高级操作:图像合成、绘制、颜色空间转换
- 实际应用案例:缩略图生成、批量处理和水印添加
Pillow库在Web开发、数据科学、计算机视觉等领域都有广泛应用。建议进一步探索其官方文档以了解更多高级功能。
进一步学习资源:
- 官方文档:Pillow Documentation
- GitHub仓库:Pillow on GitHub
- 图像处理算法:Digital Image Processing
本文由JiHuiZhen于2025-08-13发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20257995.html
发表评论