如何用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
相关产品推荐
相关产品推荐

