今天直接上实用干货——用Python脚本,一键把PPT里所有图片批量且无损的提取出来,原图画质、格式不变,本地运行不涉及文件上传。以后再要PPT里的图,直接跑脚本,不用再手动存图!
回复 Py脚本 获取完整可跑代码
现有个PPT:产品介绍.pptx目标很简单:把PPT里面所有图片一次性全部提取,整齐存到文件夹,原图原样保存,不用手动操作,还能自动过滤PPT里的垃圾缓存图,只留有效图片。
别被PPT唬住!.pptx本质就是一个(zip)压缩包,所有有效图片都藏在ppt/media/ 目录里(带扩展名的才是真图片)。手动改后缀为.zip解压就能看到,咱们用Python直接模拟这个过程,批量处理更省心,还能自动跳过系统生成的垃圾缓存图。
import osimport sysimport zipfilefrom shutil import copyfileobj# 统一图片输出目录(彻底避开中文空格路径坑)OUTPUT_DIR = r'C:\Desktop\PPT图片'# 强制创建目录,不存在就建,存在也不报错os.makedirs(OUTPUT_DIR, exist_ok=True)print(f'✅ 图片输出文件夹已准备好:{OUTPUT_DIR}')# 拖入PPT/文件夹路径,自动处理空格和特殊字符raw_path = input('把PPT或PPT文件夹拖进来:').strip().strip('"')path = os.path.abspath(raw_path)# 校验路径是否存在if not os.path.exists(path):print('❌ 路径不存在,检查是不是拖错了!') input('按回车退出...') sys.exit()# 自动筛选所有.pptx文件,排除文件夹和其他杂文件ppt_files = []if os.path.isfile(path) and path.lower().endswith('.pptx'): ppt_files = [path]elif os.path.isdir(path):for file_name in os.listdir(path): full_file_path = os.path.join(path, file_name)if os.path.isfile(full_file_path) and full_file_path.lower().endswith('.pptx'): ppt_files.append(full_file_path)else:print('❌ 只认.pptx文件或装PPT的文件夹,别瞎拖!') input('按回车退出...') sys.exit()# 校验是否找到PPT文件if not ppt_files:print('❌ 这里面压根没有PPT文件,玩啥呢?') input('按回车退出...') sys.exit()print(f'找到 {len(ppt_files)} 个PPT,开扒!')total_valid_imgs = 0# 逐个处理PPT,只提取有效图片for idx, ppt_path in enumerate(ppt_files, 1):# 清理PPT名里的空格,避免命名混乱 ppt_name_raw = os.path.splitext(os.path.basename(ppt_path))[0] ppt_name_clean = ppt_name_raw.replace(' ', '_')print(f'正在扒:{ppt_name_raw}.pptx ({idx}/{len(ppt_files)})') valid_count = 0 try: with zipfile.ZipFile(ppt_path, 'r') as zip_obj:# 筛选media目录下的所有文件 all_media_files = [f for f in zip_obj.namelist() if f.startswith('ppt/media/')]# 只处理带扩展名的有效图片,跳过垃圾缓存图for media_file in all_media_files: img_filename = os.path.basename(media_file)# 无扩展名的都是系统缓存图,直接跳过if'.' not in img_filename:continue# 拼接保存路径,按「清理后的PPT名_图片名」命名,不重名 save_filename = f'{ppt_name_clean}_{img_filename}' save_full_path = os.path.join(OUTPUT_DIR, save_filename)# 读取并保存图片,流式处理不占内存 with zip_obj.open(media_file) as src_file, open(save_full_path, 'wb') as dst_file: copyfileobj(src_file, dst_file) valid_count += 1# 输出当前PPT的提取结果print(f' ✓ 成功扒出 {valid_count} 张有效图片') total_valid_imgs += valid_count except Exception as e:print(f' ✗ 处理翻车:{e}')# 最终结果汇总print(f'\n🎉 全部搞定!一共扒出 {total_valid_imgs} 张有效图片')print(f'📂 所有图片都在:{OUTPUT_DIR}(无多余垃圾文件)')input('按回车收工...')1.OUTPUT_DIR固定输出目录:彻底避开中文、空格路径的坑,所有图片统一存这里,还能按PPT名区分来源;2.过滤无扩展名文件:**if '.' not in img_filename直接跳过PPT自带的垃圾缓存图,只统计有效图片;3.清理PPT名空格:把带空格的PPT名换成下划线,避免系统误创无扩展名文件;4.流式保存图片:copyfileobj 处理大图片也不卡内存,速度快还稳。
1.仅支持.pptx格式,不支持旧版.ppt:老版ppt是二进制格式,不是压缩包结构,可另存为pptx后使再跑;2.背景图片也会被提取:只要是插入/设置为背景的有效图片,都会被扒出来,不需要的手动删一下就行;3.加密PPT无法处理:带密码保护的文档会读取失败,需先解除密码再跑脚本;4.数量统计绝对准确:自动跳过系统缓存图,显示的数量就能看到的有效图片数量。
1.按幻灯片页面分类提取:解析slides目录下的XML文件,匹配图片和对应页码;2.提取后批量转格式:用PIL库把所有图片统一转为 JPG/PNG;3.自动分类保存:不同PPT的图片存到各自子文件夹,更整洁。
找一个带图的.pptx文件跑脚本,再手动把PPT后缀改为.zip解压对比。会发现:Office文件全是纸老虎,只提取带扩展名的文件,才是真・有效扒图!
评论区吼一声,下期咱就盘它!
回复「Py脚本」获取PDF版资料及各种脚本