Python-Pillow图像处理库入门教程
Pillow Python Imaging Library (Fork) 项目地址: https://gitcode.com/gh_mirrors/pi/Pillow
Python-Pillow(简称Pillow)是Python生态中最流行的图像处理库之一,它提供了丰富的图像操作功能。本文将带你全面了解Pillow的核心功能和使用方法。
图像基础操作
图像加载与属性查看
Pillow的核心是Image
类,我们可以通过多种方式创建Image
对象:
from PIL import Image
im = Image.open("example.jpg") # 从文件加载图像
加载后可以查看图像的基本属性:
print(im.format) # 图像格式(JPEG, PNG等)
print(im.size) # 图像尺寸(宽度,高度)
print(im.mode) # 图像模式(RGB, L等)
常见的图像模式包括:
- "L":灰度图像
- "RGB":真彩色图像
- "CMYK":印刷四色模式
图像显示
虽然Pillow提供了show()
方法来显示图像,但它的效率不高:
im.show() # 会保存为临时文件并用系统默认程序打开
图像文件操作
读取与保存图像
Pillow支持多种图像格式,读取时会自动检测格式:
im = Image.open("input.png") # 读取PNG文件
im.save("output.jpg") # 保存为JPEG格式
格式转换示例
下面是将图像批量转换为JPEG格式的代码:
import os
from PIL import Image
for file in os.listdir("."):
if file.endswith(".png"):
outfile = os.path.splitext(file)[0] + ".jpg"
try:
with Image.open(file) as im:
im.save(outfile)
except OSError:
print(f"无法转换 {file}")
图像编辑与处理
裁剪与粘贴
# 定义裁剪区域(左,上,右,下)
box = (100, 100, 400, 400)
region = im.crop(box)
# 旋转裁剪区域
region = region.rotate(180)
# 粘贴回原图
im.paste(region, box)
图像合并
合并两张图像为一个更宽的图像:
def merge_images(im1, im2):
width = im1.width + im2.width
height = max(im1.height, im2.height)
new_im = Image.new("RGB", (width, height))
new_im.paste(im1, (0, 0))
new_im.paste(im2, (im1.width, 0))
return new_im
几何变换
基本变换
# 调整大小
small_im = im.resize((128, 128))
# 旋转45度
rotated_im = im.rotate(45)
# 镜像翻转
flipped_im = im.transpose(Image.FLIP_LEFT_RIGHT)
相对大小调整
Pillow提供了多种相对大小调整方法:
from PIL import ImageOps
# 保持比例,适应给定尺寸
ImageOps.contain(im, (100, 150))
# 保持比例,覆盖给定尺寸
ImageOps.cover(im, (100, 150))
# 精确适应给定尺寸,可能改变比例
ImageOps.fit(im, (100, 150))
颜色处理
颜色模式转换
# 转换为灰度图
gray_im = im.convert("L")
# 转换为RGBA模式(带透明度)
rgba_im = im.convert("RGBA")
颜色增强
from PIL import ImageEnhance
# 对比度增强
enhancer = ImageEnhance.Contrast(im)
enhanced_im = enhancer.enhance(1.5) # 增强50%
# 亮度调整
bright_enhancer = ImageEnhance.Brightness(im)
bright_im = bright_enhancer.enhance(0.8) # 降低20%亮度
高级技巧
图像滤镜
from PIL import ImageFilter
# 应用模糊滤镜
blurred_im = im.filter(ImageFilter.BLUR)
# 边缘增强
edge_enhanced = im.filter(ImageFilter.EDGE_ENHANCE)
像素级操作
# 将每个像素值乘以1.5
bright_im = im.point(lambda x: x * 1.5)
# 条件处理:红色通道小于100的区域
red, green, blue = im.split()
mask = red.point(lambda x: x < 100 and 255)
动画处理
Pillow支持GIF等动画格式:
# 读取GIF动画
with Image.open("animation.gif") as im:
try:
while True:
im.seek(im.tell() + 1) # 跳到下一帧
# 处理当前帧
except EOFError:
pass # 动画结束
创建GIF动画
images = [Image.open(f) for f in ["frame1.png", "frame2.png", "frame3.png"]]
images[0].save("output.gif",
save_all=True,
append_images=images[1:],
duration=200, # 每帧200毫秒
loop=0) # 无限循环
总结
Pillow库提供了从基础到高级的完整图像处理功能。通过本教程,你应该已经掌握了:
- 图像的基本加载、保存和属性查看
- 常见的图像编辑操作(裁剪、旋转、合并等)
- 颜色处理和增强技术
- 滤镜和像素级操作
- 动画处理技巧
这些功能可以满足日常开发中90%以上的图像处理需求。对于更高级的应用,Pillow还支持与其他科学计算库(如NumPy)的集成,为计算机视觉等应用提供了良好基础。
Pillow Python Imaging Library (Fork) 项目地址: https://gitcode.com/gh_mirrors/pi/Pillow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考