详解用Python对图片进行循环剪裁

  • Post category:Python

循环剪裁图片是一个比较常见的需求,用Python处理这个任务非常方便。下面是使用Python对图片进行循环剪裁的具体步骤:

步骤一:安装Pillow库

要对图片进行剪裁,需要使用Pillow库。Pillow库是Python Image Library (PIL)的一个分支,具有更好的兼容性和易用性。可以通过pip安装,输入以下命令:

pip install Pillow

步骤二:导入Pillow库并打开图片

导入Pillow库并使用open()函数打开图片,例如打开名称为“example.jpg”的图片:

from PIL import Image

img = Image.open("example.jpg")

步骤三:确定剪裁区域

根据需要剪裁的大小和位置,确定剪裁区域。如果需要循环剪裁,则可以使用循环语句,在每次迭代中更新剪裁区域。例如,以下代码使用for循环对图片进行垂直剪裁:

width, height = img.size
crop_height = height // 3  # 图片高度的1/3

for i in range(3):
    crop_top = i * crop_height  # 每次剪裁区域顶部位置
    crop_bottom = crop_top + crop_height  # 每次剪裁区域底部位置
    crop_area = (0, crop_top, width, crop_bottom)  # 剪裁区域,左、上、右、下
    crop_img = img.crop(crop_area)  # 剪裁图片
    crop_img.show()  # 显示剪裁后的图片

上述代码将图片分成三个等高的部分,每部分的宽度等于图片的宽度,并依次进行剪裁和输出。

步骤四:保存剪裁后的图片

在每次剪裁后,可以通过save()方法将剪裁后的图片保存在本地。例如,将剪裁后的图片保存为“new_image_1.jpg”,“new_image_2.jpg”和“new_image_3.jpg”:

for i in range(3):
    crop_top = i * crop_height
    crop_bottom = crop_top + crop_height
    crop_area = (0, crop_top, width, crop_bottom)
    crop_img = img.crop(crop_area)
    file_name = "new_image_" + str(i+1) + ".jpg"
    crop_img.save(file_name)

最后,执行完成后会在当前目录生成三个新的图片文件“new_image_1.jpg”,“new_image_2.jpg”和“new_image_3.jpg”。

以上是使用Python对图片进行循环剪裁的完整攻略,下面给出两个示例说明:

示例1:水平剪裁图片

如果需要对图片进行水平剪裁,需要调整剪裁区域的左和右值。以下代码使用for循环对图片进行水平剪裁:

width, height = img.size
crop_width = width // 3  # 图片宽度的1/3

for i in range(3):
    crop_left = i * crop_width
    crop_right = crop_left + crop_width
    crop_area = (crop_left, 0, crop_right, height)
    crop_img = img.crop(crop_area)
    file_name = "new_image_" + str(i+1) + ".jpg"
    crop_img.save(file_name)

该代码将图片水平分为三个等宽的部分,并依次进行剪裁和保存。

示例2:对多张图片进行循环剪裁

循环剪裁多张图片可以使用os库中的文件遍历功能,例如以下代码使用os库遍历图片文件,并进行三等分垂直剪裁:

import os

folder_path = "image_folder"  # 存放图片的文件夹路径
crop_height = height // 3  # 每张图片剪裁区域的高度

for file_name in os.listdir(folder_path):
    file_path = os.path.join(folder_path, file_name)
    img = Image.open(file_path)
    width, height = img.size

    for i in range(3):
        crop_top = i * crop_height
        crop_bottom = crop_top + crop_height
        crop_area = (0, crop_top, width, crop_bottom)
        crop_img = img.crop(crop_area)
        new_file_name = os.path.splitext(file_name)[0] + "_" + str(i+1) + ".jpg"
        new_file_path = os.path.join(folder_path, new_file_name)
        crop_img.save(new_file_path)

以上代码遍历“image_folder”文件夹中的所有图片文件,对每张图片进行三等分垂直剪裁,并在原文件名后添加“_1”,“_2”,“_3”后缀,保存新文件在原文件夹中。