Python-Pillow图像处理库入门教程

Python-Pillow图像处理库入门教程

Pillow Python Imaging Library (Fork) Pillow 项目地址: 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库提供了从基础到高级的完整图像处理功能。通过本教程,你应该已经掌握了:

  1. 图像的基本加载、保存和属性查看
  2. 常见的图像编辑操作(裁剪、旋转、合并等)
  3. 颜色处理和增强技术
  4. 滤镜和像素级操作
  5. 动画处理技巧

这些功能可以满足日常开发中90%以上的图像处理需求。对于更高级的应用,Pillow还支持与其他科学计算库(如NumPy)的集成,为计算机视觉等应用提供了良好基础。

Pillow Python Imaging Library (Fork) Pillow 项目地址: https://gitcode.com/gh_mirrors/pi/Pillow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤定昌Germaine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值