You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python批量裁剪文件夹内图片并将结果保存至Excel

批量图片裁剪并将结果保存至Excel的实现

修改思路

  • 保留原API调用逻辑,增加异常处理保障程序稳定性
  • 实现文件夹遍历,批量处理所有主流格式的图片
  • 记录每一张图片的处理状态,最终导出到Excel
  • 自动创建输出目录,统一保存裁剪后的图片

完整代码实现

import os
import requests
import json
import base64
import io
from PIL import Image
import pandas as pd

def send_request_croppingsegm(file_path, doctype):
    url = 'http://52.77.70.50:8006/detectGeneralDocumentV3/single'
    try:
        # 使用with语句自动管理文件资源
        with open(file_path, 'rb') as img_file:
            files = [('imageFile', (os.path.basename(file_path), img_file, 'image/png'))]
            headers = {}
            payload = {'documentType': str(doctype)}
            res = requests.request("POST", url, data=payload, files=files, verify=False).text
            res_json = json.loads(res)
            
            # 校验API返回的有效性
            if 'document_image' not in res_json:
                raise ValueError(f"API未返回有效裁剪数据: {res_json}")
                
            cropped_data64 = base64.b64decode(res_json['document_image'])
            cropped_img = Image.open(io.BytesIO(cropped_data64))
            return {'status': '成功', 'image': cropped_img, 'error': ''}
    except Exception as e:
        return {'status': '失败', 'image': None, 'error': str(e)}

def batch_process_images(input_dir, output_dir, doctype=2, excel_path='裁剪结果记录.xlsx'):
    # 自动创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    
    # 支持的图片格式
    supported_formats = ('.png', '.jpg', '.jpeg', '.bmp', '.tiff')
    
    results = []
    
    for filename in os.listdir(input_dir):
        file_path = os.path.join(input_dir, filename)
        # 仅处理文件且为支持的图片格式
        if os.path.isfile(file_path) and filename.lower().endswith(supported_formats):
            print(f"处理中: {filename}")
            process_result = send_request_croppingsegm(file_path, doctype)
            
            record = {
                '原文件名': filename,
                '处理状态': process_result['status'],
                '错误信息': process_result['error'],
                '裁剪后路径': ''
            }
            
            if process_result['status'] == '成功':
                output_filename = f"裁剪_{filename}"
                output_path = os.path.join(output_dir, output_filename)
                process_result['image'].save(output_path)
                record['裁剪后路径'] = output_path
            
            results.append(record)
    
    # 导出结果到Excel
    df = pd.DataFrame(results)
    df.to_excel(excel_path, index=False)
    print(f"处理完成,结果已保存至: {excel_path}")

# 调用示例
if __name__ == "__main__":
    INPUT_DIR = 'C:/Users/API Test'
    OUTPUT_DIR = 'C:/Users/API Test/裁剪结果'
    batch_process_images(INPUT_DIR, OUTPUT_DIR)

关键改动说明

  • 异常捕获:在API调用和文件操作环节加入try-except块,单个图片处理失败不会中断整个批量任务,同时记录错误详情。
  • 资源安全:用with语句打开图片文件,确保文件自动关闭,避免资源泄漏。
  • 格式筛选:只处理指定格式的图片文件,跳过非图片类型文件。
  • 结果追踪:每一条记录包含原文件名、处理状态、错误信息和裁剪后路径,方便后续核查。
  • 自动建目录:无需手动创建输出文件夹,程序会自动生成。

内容的提问来源于stack exchange,提问作者Ketsu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:20:56