图片分割实用指南:使用Python进行高效图像分割处理

在裁剪聊天记录图片时,如果每张截图是连续的、且你不希望丢失任何内容,那么裁剪工具必须避免内容被切割丢失。要实现这一点,需要确保每次裁剪时,图片的底部和下一张图片的顶部存在一定的重叠区域,这样才能保证聊天记录的连续性。

更新后的需求:

  1. 输入图片

    • 处理 Screenshots 目录下的 4 张图片,文件名如下:
      • Screenshot_2024_1023_222415.jpg
      • Screenshot_2024_1023_222547.jpg
      • Screenshot_2024_1023_222717.jpg
      • Screenshot_2024_1023_222819.jpg
  2. 裁剪尺寸

    • 每张图片裁剪为宽度 1260px,高度 2800px
  3. 重叠处理

    • 每张裁剪时,上下两部分必须有一定的重叠区域,以确保聊天记录的连续性,不会丢失信息。
    • 默认重叠区域为 200px(可以根据需要调整),这样保证当前图片裁剪的底部和下一部分图片的顶部内容有交集,避免聊天记录的跳断或丢失。
  4. 裁剪操作

    • 按顺序处理上述 4 张图片。
    • 如果图片高度大于 2800px,则按 2800px 高度进行裁剪,每块之间重叠 200px
    • 每张图片可能会被裁剪为多块。
  5. 输出命名规则

    • 裁剪后的图片按照 WeChat_chat_history_01WeChat_chat_history_02 这样的格式进行依次命名,确保从第一张截图裁剪的第一块开始编号,并按顺序递增。
    • 每张裁剪后的图片保存为 .png 格式。
  6. 输出目录

    • 将裁剪后的图片保存到 output_images 目录中。如果该目录不存在,则自动创建。
  7. 示例输出

    • 如果第一张图片裁剪为两部分,第二张图片裁剪为一部分,则最终输出文件应如下:
      • WeChat_chat_history_01.png
      • WeChat_chat_history_02.png
      • WeChat_chat_history_03.png
    • 确保每张图片内容不丢失,且裁剪时的内容是连贯的。

代码实现更新:

这里是基于上述需求的脚本更新,增加了图片裁剪时的重叠处理:

import os
from PIL import Image

def split_image(image_path, output_dir, width=1260, height=2800, overlap=200, prefix="WeChat_chat_history", index=1):
    # 打开图片
    img = Image.open(image_path)
    img_width, img_height = img.size
    
    # 计算需要切割的次数
    step_height = height - overlap  # 每次裁剪时前后重叠区域
    num_slices = (img_height - overlap) // step_height
    if (img_height - overlap) % step_height != 0:
        num_slices += 1

    # 如果输出目录不存在,创建它
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 开始裁剪并保存
    for i in range(num_slices):
        # 定义裁剪区域 (left, upper, right, lower)
        left = 0
        upper = i * step_height
        right = width
        lower = upper + height if upper + height < img_height else img_height

        # 裁剪图像
        cropped_img = img.crop((left, upper, right, lower))

        # 保存裁剪后的图像
        output_path = os.path.join(output_dir, f"{prefix}_{index:02d}.png")
        cropped_img.save(output_path)
        print(f"保存图片: {output_path}")
        index += 1

    return index  # 返回更新后的索引

# 处理多个文件
def process_images(input_dir, output_dir, width=1260, height=2800, overlap=200, prefix="WeChat_chat_history"):
    files = [
        "Screenshot_2024_1023_222415.jpg",
        "Screenshot_2024_1023_222547.jpg",
        "Screenshot_2024_1023_222717.jpg",
        "Screenshot_2024_1023_222819.jpg"
    ]
    
    index = 1
    for file in files:
        image_path = os.path.join(input_dir, file)
        index = split_image(image_path, output_dir, width, height, overlap, prefix, index)

# 示例使用
input_dir = "Screenshots"  # 输入图片所在的目录
output_dir = "output_images"  # 输出图片保存目录
process_images(input_dir, output_dir)

更新后的要点:

  1. 重叠处理:新增参数 overlap 来控制图片裁剪的重叠区域,确保聊天记录不会在图片切换时丢失。默认重叠 200px
  2. 裁剪连贯性:裁剪后,下一部分图片会包含上一部分图片的最后一部分,保证连续的聊天记录不会中断。
  3. 输出命名顺序:裁剪图片将按 WeChat_chat_history_01 等格式顺序命名。

这样,所有裁剪出来的图片会连贯地保留聊天记录内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值