剪裁图片是在计算机视觉和图像处理中很常见的任务。Python对这一任务提供了很好的支持。本攻略将详细讲解如何用Python对图片进行循环剪裁。
准备工作
在开始编写代码前,需要安装Python的图像处理库Pillow。可以使用以下命令进行安装:
pip install Pillow
加载图片
首先,需要从本地磁盘或远程URL中加载要剪切的图片。可以使用Pillow库中的Image.open()
方法来实现。
from PIL import Image
image_path = "path/to/image.jpg"
image = Image.open(image_path)
剪切图片
在剪切图片前,需要确定剪切后图像的大小和位置。下面是一个示例,将原始图像剪切为5个大小相同的图像:
width, height = image.size
crop_width, crop_height = width//5, height
for i in range(5):
left = i*crop_width
top = 0
right = left + crop_width
bottom = crop_height
crop = image.crop((left, top, right, bottom))
crop()
方法接受一个四元组参数,包含剪切后图像的左、上、右和下像素坐标。
保存剪切的图片
可以使用crop.save()
方法将剪切后的图片保存到本地。以下是一个将每个剪切后的图像保存为单独文件的示例:
for i in range(5):
left = i * crop_width
top = 0
right = left + crop_width
bottom = crop_height
crop = image.crop((left, top, right, bottom))
crop.save(f"path/to/output_{i}.jpg")
可以将path/to/output
替换为保存文件的路径,{i}
表示文件的编号。
示例说明
示例一
剪切图片为正方形数量的小图片:
from PIL import Image
image = Image.open("path/to/image.jpg")
width, height = image.size
crop_size = min(width, height)
crop_width, crop_height = crop_size // 3, crop_size // 3
for i in range(3):
for j in range(3):
left = i * crop_width
top = j * crop_height
right = left + crop_width
bottom = top + crop_height
crop = image.crop((left, top, right, bottom))
crop.save(f"path/to/output_{i}_{j}.jpg")
该示例将原始图像剪切为3×3个大小相同的方形图像。
示例二
剪切图片为长方形大小的小图片:
from PIL import Image
image = Image.open("path/to/image.jpg")
width, height = image.size
crop_width, crop_height = 200, 300
for i in range(width // crop_width):
for j in range(height // crop_height):
left = i * crop_width
top = j * crop_height
right = left + crop_width
bottom = top + crop_height
if right > width:
right = width
if bottom > height:
bottom = height
crop = image.crop((left, top, right, bottom))
crop.save(f"path/to/output_{i}_{j}.jpg")
该示例将原图像剪切为200×300大小的长方形,剪切后的图像可以部分重叠。