如何修改Python/PIL代码批量缩放子文件夹图片并添加缩略图后缀?
批量缩放JPG并另存为新文件的解决方案
完整可运行代码
import os from PIL import Image # 目标文件夹路径,os.path.expanduser兼容不同系统路径格式 root_dir = os.path.expanduser("../../Desktop/python/") # 指定缩放尺寸 target_size = (450, 600) # 递归遍历所有子文件夹及文件 for dirpath, _, filenames in os.walk(root_dir): for filename in filenames: # 过滤JPG文件(兼容大小写后缀) if filename.lower().endswith(".jpg"): img_full_path = os.path.join(dirpath, filename) try: # 打开图片并自动管理资源 with Image.open(img_full_path) as img: # 保持比例缩放至不超过目标尺寸,需强制拉伸则替换为img = img.resize(target_size) img.thumbnail(target_size) # 拆分文件名与扩展名,避免多圆点文件名出错 base_name, ext = os.path.splitext(filename) # 构造新文件名 new_filename = f"{base_name}_thumbnail{ext}" new_full_path = os.path.join(dirpath, new_filename) # 保存缩放后的图片 img.save(new_full_path) print(f"处理完成:{new_full_path}") except Exception as e: print(f"处理{img_full_path}失败:{str(e)}")
关键逻辑说明
- 目录遍历:用
os.walk递归扫描目标文件夹下所有子目录,确保嵌套的JPG文件都能被处理 - 文件名处理:通过
os.path.splitext拆分文件名和扩展名,避免直接字符串拼接导致的格式错误(比如原文件名为pic.detail.jpg时,能生成正确的pic.detail_thumbnail.jpg) - 缩放控制:
thumbnail方法保留图片原始比例,将图片缩小至不超过目标尺寸;若需要强制拉伸到固定尺寸(忽略比例),替换为img.resize(target_size)即可 - 异常防护:捕获单张图片处理时的错误,避免因某张损坏的图片导致整个程序中断
常见报错排查
- 文件名格式错误:若之前因新文件名格式报错,检查是否使用了
os.path.splitext拆分扩展名,不要直接在原文件名后拼接字符串 - 权限问题:若提示PermissionError,确认目标文件夹有写入权限
- PIL读取失败:部分损坏或特殊编码的JPG可能无法被PIL读取,尝试升级pillow:
pip install --upgrade pillow
内容的提问来源于stack exchange,提问作者ftktsoi01
相关产品推荐
相关产品推荐

