一、安装 Pillow
python
pip install Pillow
二、基本用法
导入 Pillow 中的 Image
模块:
python
from PIL import Image
三、图像打开与保存
1. 打开图像
python
img = Image.open('path_to_image.jpg')
2. 保存图像
python
img.save('path_to_save_image.png')
四、图像基本操作
1. 获取图像信息
python
print(img.format) # 图像格式,例如 'JPEG'
print(img.size) # 图像尺寸 (宽度, 高度)
print(img.mode) # 图像模式,例如 'RGB', 'L' 等
2. 图像显示
python
img.show()
3. 改变图像大小
python
img_resized = img.resize((new_width, new_height))
4. 裁剪图像
python
box = (left, upper, right, lower)
img_cropped = img.crop(box)
5. 旋转和翻转
python
img_rotated = img.rotate(90) # 顺时针旋转 90 度
img_flipped = img.transpose(Image.FLIP_LEFT_RIGHT) # 水平翻转
五、图像处理
1. 转换图像模式
python
img_gray = img.convert('L') # 转为灰度图像
img_rgba = img.convert('RGBA') # 转为 RGBA 图像
2. 修改图像亮度、对比度
可以使用 ImageEnhance
模块进行增强:
python
from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(img)
img_brightened = enhancer.enhance(factor) # factor > 1 增加亮度,< 1 减少亮度
enhancer_contrast = ImageEnhance.Contrast(img)
img_contrasted = enhancer_contrast.enhance(factor)
3. 应用滤镜
python
from PIL import ImageFilter
img_blurred = img.filter(ImageFilter.BLUR) # 模糊
img_sharpened = img.filter(ImageFilter.SHARPEN) # 锐化
# 其他滤镜
img_filtered = img.filter(ImageFilter.CONTOUR)
六、绘图操作
使用 ImageDraw
来绘制图形和文本。
python
from PIL import ImageDraw, ImageFont
draw = ImageDraw.Draw(img)
# 绘制矩形
draw.rectangle([x1, y1, x2, y2], outline="red", fill="blue")
# 绘制圆形
draw.ellipse([x1, y1, x2, y2], outline="green", fill="yellow")
# 绘制文本
font = ImageFont.truetype("arial.ttf", size=20)
draw.text((x, y), "Hello, World!", fill="white", font=font)
七、创建新图像
python
new_img = Image.new('RGB', (width, height), color=(255, 255, 255)) # 创建白色背景的图像
八、图像合成
可以将多个图像合成在一起:
python
background = Image.open('background.jpg')
foreground = Image.open('foreground.png')
background.paste(foreground, (x, y), foreground) # 使用 foreground 的 alpha 通道
九、图像幻灯片(GIF)
创建 GIF 动画:
python
img1 = Image.open('frame1.png')
img2 = Image.open('frame2.png')
img1.save('output.gif', save_all=True, append_images=[img2], duration=500, loop=0)
十、常见问题与技巧
- 处理大型图像 :如果内存不足,可以使用
Image.thumbnail()
方法创建小图。
python
img.thumbnail((width, height))
- 错误处理:打开图像时,可以捕获错误以处理无效图像:
python
try:
img = Image.open('invalid_image.jpg')
except IOError:
print("Cannot open the image.")
十一、高级功能
1. 图像通道操作
python
r, g, b = img.split() # 分离 RGB 通道
img_merged = Image.merge("RGB", (b, g, r)) # 交换通道
2. 图像直方图
python
histogram = img.histogram()
3. 图像像素操作
python
pixels = img.load()
width, height = img.size
for i in range(width):
for j in range(height):
r, g, b = pixels[i, j]
# 修改像素值
pixels[i, j] = (r + 10, g + 10, b + 10)
4. 图像蒙版
python
mask = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((x1, y1, x2, y2), fill=255)
img.putalpha(mask)
5. 图像金字塔
python
img_pyramid = img.pyramid_reduce(scale=2) # 缩小
img_pyramid_expand = img.pyramid_expand(scale=2) # 放大
十二、图像分析
1. 边缘检测
python
from PIL import ImageFilter
img_edges = img.filter(ImageFilter.FIND_EDGES)
2. 轮廓检测
python
img_contour = img.filter(ImageFilter.CONTOUR)
十三、图像格式转换
python
img.save('output.png', 'PNG')
img.save('output.bmp', 'BMP')
十四、图像压缩
python
img.save('output.jpg', 'JPEG', quality=50) # 质量设置为 50
十五、图像批处理
python
import os
for filename in os.listdir('images_folder'):
if filename.endswith('.jpg'):
img = Image.open(os.path.join('images_folder', filename))
img_resized = img.resize((new_width, new_height))
img_resized.save(os.path.join('output_folder', filename))