063. 编写一个函数,实现简单的图像处理功能,旋转、缩放

在 Python 中,可以使用 Pillow 库(PIL 的一个分支)来实现图像处理功能,包括旋转和缩放。以下是一个示例代码,展示如何编写一个函数来实现图像的旋转和缩放功能。

安装 Pillow 库

在开始之前,请确保你已经安装了 Pillow 库。如果没有安装,可以通过以下命令安装:

pip install pillow

示例代码

以下代码定义了一个函数 process_image,支持加载图像、旋转和缩放操作,并保存处理后的图像。

from PIL import Image

def process_image(input_path, output_path, rotate_angle=0, scale_factor=1.0):
    """
    简单的图像处理函数,支持旋转和缩放

    :param input_path: 输入图像的路径
    :param output_path: 输出图像的路径
    :param rotate_angle: 旋转角度(顺时针方向),默认为 0
    :param scale_factor: 缩放比例,大于 1 放大,小于 1 缩小,默认为 1.0
    """
    try:
        # 打开图像文件
        with Image.open(input_path) as img:
            # 旋转图像
            if rotate_angle != 0:
                img = img.rotate(rotate_angle, expand=True)  # expand=True 会调整画布大小以适应旋转后的图像

            # 缩放图像
            if scale_factor != 1.0:
                new_size = (int(img.width * scale_factor), int(img.height * scale_factor))
                img = img.resize(new_size, Image.ANTIALIAS)  # 使用高质量的缩放算法

            # 保存处理后的图像
            img.save(output_path)
            print(f"图像处理完成,已保存到 {output_path}")
    except Exception as e:
        print(f"图像处理失败:{e}")

# 示例用法
if __name__ == "__main__":
    input_path = "input.jpg"  # 替换为你的输入图像路径
    output_path = "output.jpg"  # 替换为你的输出图像路径
    rotate_angle = 45  # 旋转角度
    scale_factor = 0.5  # 缩放比例

    process_image(input_path, output_path, rotate_angle, scale_factor)

代码说明

打开图像

  • 使用 Image.open() 打开图像文件。

  • 使用 with 语句确保图像文件在处理完成后正确关闭。

旋转图像: 使用 img.rotate() 方法旋转图像。expand=True 参数会调整画布大小以适应旋转后的图像,避免裁剪。

缩放图像:使用 img.resize() 方法缩放图像。Image.ANTIALIAS 是一个高质量的缩放算法,可以确保图像在缩放时保持较好的质量。

保存图像:使用 img.save() 方法将处理后的图像保存到指定路径。

异常处理:使用 try-except 捕获可能的异常,例如文件不存在、格式错误等。

示例输出

假设输入图像为 input.jpg,旋转角度为 45 度,缩放比例为 0.5,处理后的图像将保存为 output.jpg,并打印以下信息:

图像处理完成,已保存到 output.jpg

扩展功能

如果你需要更多图像处理功能,Pillow 库还支持以下操作:

  • 裁剪图像
cropped_img = img.crop((left, upper, right, lower))
  • 调整亮度、对比度等
from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(img)
img = enhancer.enhance(factor)  # factor > 1 增加亮度,factor < 1 降低亮度
  • 应用滤镜
from PIL import ImageFilter
img = img.filter(ImageFilter.BLUR)  # 模糊滤镜

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)