要在 Python 中对放大后的图片进行区域截图,你可以继续使用 Pillow 库。下面是一个示例,展示如何从放大后的图片中截取特定区域:

from PIL import Image

def enlarge_and_crop(image_path, scale_factor, crop_box):
    # 打开图片
    with Image.open(image_path) as img:
        # 获取原始尺寸
        width, height = img.size
        
        # 计算放大后的尺寸
        new_width = width * scale_factor
        new_height = height * scale_factor
        
        # 使用最近邻算法进行放大
        enlarged_img = img.resize((new_width, new_height), resample=Image.NEAREST)
        
        # 截取图片中的指定区域
        cropped_img = enlarged_img.crop(crop_box)
        
        # 显示截取后的图片
        cropped_img.show()
        
        # 保存截取后的图片
        cropped_img.save(f"cropped_{scale_factor}x.png")

# 测试函数
image_path = 'example.jpg'  # 这里替换为你需要放大的图片路径
scale_factor = 2  # 放大倍数
crop_box = (100, 100, 300, 300)  # 截图的左上角和右下角坐标 (left, upper, right, lower)

enlarge_and_crop(image_path, scale_factor, crop_box)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

在这个示例中,我们定义了一个名为 enlarge_and_crop 的函数,它接受三个参数:

  • image_path:图片的路径。
  • scale_factor:放大的倍数。
  • crop_box:一个元组,表示截取区域的左上角和右下角坐标 (left, upper, right, lower)。

函数首先打开图片,然后放大图片,并使用 crop 方法从放大后的图片中截取指定的区域。crop_box 的坐标需要根据放大后的尺寸来确定。

如何确定 crop_box 的坐标

如果你已经知道了原始图片中想要截取的区域坐标 (left, upper, right, lower),那么你可以按照放大后的尺寸来计算新的坐标。例如,如果原始图片中要截取的区域是 (50, 50, 150, 150),放大 2 倍后,新的坐标将是 (50 * 2, 50 * 2, 150 * 2, 150 * 2)

示例代码

以下是完整的示例代码,假设原始图片中要截取的区域是 (50, 50, 150, 150),放大 2 倍后,新的坐标将是 (100, 100, 300, 300)

from PIL import Image

def enlarge_and_crop(image_path, scale_factor, original_crop_box):
    # 打开图片
    with Image.open(image_path) as img:
        # 获取原始尺寸
        width, height = img.size
        
        # 计算放大后的尺寸
        new_width = width * scale_factor
        new_height = height * scale_factor
        
        # 使用最近邻算法进行放大
        enlarged_img = img.resize((new_width, new_height), resample=Image.NEAREST)
        
        # 根据放大倍数计算新的裁剪框
        crop_box = (
            original_crop_box[0] * scale_factor,
            original_crop_box[1] * scale_factor,
            original_crop_box[2] * scale_factor,
            original_crop_box[3] * scale_factor
        )
        
        # 截取图片中的指定区域
        cropped_img = enlarged_img.crop(crop_box)
        
        # 显示截取后的图片
        cropped_img.show()
        
        # 保存截取后的图片
        cropped_img.save(f"cropped_{scale_factor}x.png")

# 测试函数
image_path = 'example.jpg'  # 这里替换为你需要放大的图片路径
scale_factor = 2  # 放大倍数
original_crop_box = (50, 50, 150, 150)  # 原始图片中要截取的区域坐标

enlarge_and_crop(image_path, scale_factor, original_crop_box)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.

这段代码将放大图片并截取指定区域,然后显示和保存截取后的图片。请确保替换 image_path 为你要处理的图片路径,并根据实际情况调整 original_crop_box 的值。