Python 课程22-Pillow
前言
Pillow 是一个 Python 图像处理库,是 Python Imaging Library (PIL) 的升级版。Pillow 提供了对常见图像文件格式(如 PNG、JPEG、GIF 等)的支持,并允许你进行图像裁剪、调整大小、旋转、滤镜应用、文本添加等操作。Pillow 广泛用于 Web 应用、机器学习中的图像预处理和图像批处理等场景。
本教程将展示如何使用 Pillow 处理图像文件,涵盖从基础图像操作到高级图像处理技巧。你将学会如何加载图像、编辑图像、保存处理后的图像,并应用不同的图像滤镜和效果。
目录
-
Pillow 基础
- 安装 Pillow
- 加载与显示图像
- 保存图像
- 获取图像信息
-
基本图像操作
- 调整图像大小与缩放
- 图像旋转与翻转
- 图像裁剪
- 调整图像颜色(亮度、对比度)
-
高级图像处理
- 应用滤镜与效果
- 处理透明度与 Alpha 通道
- 合并图像与图像叠加
- 添加文字到图像
-
图像格式转换与批处理
- 图像格式转换
- 图像批处理与自动化
1. Pillow 基础
安装 Pillow
你可以通过 pip 安装 Pillow:
pip install Pillow
加载与显示图像
使用 Pillow 加载并显示图像。Image.open()
函数用于打开图像,show()
函数可以显示图像。
from PIL import Image
# 加载图像
image = Image.open('example.jpg')
# 显示图像
image.show()
保存图像
使用 save()
方法可以将图像保存为不同的格式。
# 保存图像为 PNG 格式
image.save('output.png')
获取图像信息
你可以通过 size
属性获取图像的宽度和高度,format
属性查看图像的文件格式。
# 获取图像尺寸
width, height = image.size
print(f"Image Size: {width}x{height}")
# 获取图像格式
print(f"Image Format: {image.format}")
2. 基本图像操作
调整图像大小与缩放
你可以使用 resize()
方法来调整图像的大小。可以通过设置图像的新宽高来缩放图像。
# 调整图像大小
resized_image = image.resize((200, 300))
resized_image.show()
此外,还可以使用 thumbnail()
方法缩略图,保持原图比例。
# 创建缩略图
image.thumbnail((150, 150))
image.show()
图像旋转与翻转
Pillow 提供了旋转图像和翻转图像的功能。
- 旋转图像:
# 旋转 90 度
rotated_image = image.rotate(90)
rotated_image.show()
- 翻转图像:
# 水平翻转
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_image.show()
图像裁剪
你可以使用 crop()
方法裁剪图像,传入一个 4 元素的元组 (left, upper, right, lower)
定义裁剪区域。
# 裁剪图像
cropped_image = image.crop((100, 100, 400, 400))
cropped_image.show()
调整图像颜色(亮度、对比度)
Pillow 提供了 ImageEnhance
模块来调整图像的亮度、对比度、颜色和锐度。
from PIL import ImageEnhance
# 调整图像亮度
enhancer = ImageEnhance.Brightness(image)
brightened_image = enhancer.enhance(1.5) # 增强亮度
brightened_image.show()
# 调整图像对比度
contrast_enhancer = ImageEnhance.Contrast(image)
contrasted_image = contrast_enhancer.enhance(2.0) # 增强对比度
contrasted_image.show()
3. 高级图像处理
应用滤镜与效果
Pillow 提供了丰富的图像滤镜,可以通过 ImageFilter
模块应用滤镜效果。
from PIL import ImageFilter
# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.show()
# 应用锐化滤镜
sharpened_image = image.filter(ImageFilter.SHARPEN)
sharpened_image.show()
处理透明度与 Alpha 通道
对于带有透明通道的图像(如 PNG 格式),你可以直接操作其透明度。
- 设置透明度:
image = image.convert("RGBA") # 转换为带 Alpha 通道的图像
pixels = image.getdata()
# 修改每个像素的 Alpha 值
new_pixels = [(r, g, b, int(a * 0.5)) for (r, g, b, a) in pixels]
image.putdata(new_pixels)
image.show()
合并图像与图像叠加
你可以通过 paste()
方法将一张图像叠加到另一张图像上。
background = Image.open('background.jpg')
overlay = Image.open('overlay.png')
# 叠加 overlay 图像到背景图像的 (50, 50) 位置
background.paste(overlay, (50, 50), overlay) # 第三个参数是 alpha 通道
background.show()
添加文字到图像
你可以使用 ImageDraw
模块在图像上添加文本。
from PIL import ImageDraw, ImageFont
# 创建绘图对象
draw = ImageDraw.Draw(image)
# 选择字体(需要指定字体路径)
font = ImageFont.truetype("arial.ttf", 40)
# 在图像上添加文字
draw.text((50, 50), "Hello, Pillow!", fill="white", font=font)
image.show()
4. 图像格式转换与批处理
图像格式转换
你可以轻松地将图像从一种格式转换为另一种格式。
# 将 JPG 图像转换为 PNG
image = Image.open('example.jpg')
image.save('output.png')
图像批处理与自动化
Pillow 可以轻松实现批处理操作,例如调整一组图像的大小、转换格式等。
import os
from PIL import Image
input_folder = "images/"
output_folder = "output_images/"
# 批量调整大小并保存为 PNG 格式
for filename in os.listdir(input_folder):
if filename.endswith(".jpg"):
img = Image.open(os.path.join(input_folder, filename))
img = img.resize((800, 800))
img.save(os.path.join(output_folder, filename.replace(".jpg", ".png")))
结论
通过本教程,你已经学习了如何使用 Pillow 处理图像文件。Pillow 提供了丰富的功能,可以帮助你高效地进行图像处理操作,从基本的图像加载、显示、保存,到高级的图像滤镜应用、透明度处理和文本叠加等功能。Pillow 是许多 Python 图像处理项目中不可或缺的工具,广泛应用于 Web 应用、机器学习中的图像预处理以及图像批处理等场景。