在办公场景当中,同样也有这样一个需求,那就是快速批量把PPT文件中的图片提取出来,毕竟一个个点击另存为太过于繁琐,以及耗费时间,前面本渣渣分享过如何应用Python批量提取PDF文件中的图片,而这一篇本渣渣就为大家分享如何应用Python批量提取PPT文件中的图片。
其实不通过代码脚本的形式也可以快速方便的提取PPT中的图片文件,这里分享一个简单方法,那就是将PPT文件后缀更改为rar压缩文件的格式,通过解压的方式来获取所有的图片文件,感兴趣的话不妨尝试一番!
言归正传,应用Python批量提取PPT文件中的图片有两种方式,一种是单纯的提取PPT文件中的图片,这种方法可能会存在图片文件缺失的情况,而第二种方法是直接将每一页PPT转换成图片。
方法一:应用Python-pptx库
1.安装方法:
pip install python-pptx
2.提取图片使用方法:
# -*- coding: utf-8
from pptx import Presentation
import os
import sys
'''
功能:
将pptx中出现的图片素材全部导出
'''
ppt_root = jpg_root = sys.path[0]
print(ppt_root)
i = 0
def ppt2png(pptFileName):
# 实例化ppt对象
prs = Presentation(pptFileName) # PPT文件路径
# 遍历
for slide in prs.slides:
for obj in slide.shapes:
# try/except 因为非图片元素没有Image方法会弹出异常.
try:
global i
# 获取二进制字符流
imdata = obj.image.blob
# 判断文件后缀类型
imagetype = obj.image.content_type
typekey = imagetype.find('/') + 1
i += 1
imtype = imagetype[typekey:]
# 创建image文件夹保存抽出图片
path = jpg_root + "/image/"
if not os.path.exists(path):
os.makedirs(path)
# 图片生成
obj.name = "Picture" + str(i)
image_file = path + obj.name + "." + imtype
file_str = open(image_file, 'wb')
file_str.write(imdata)
file_str.close()
except:
pass
for fn in (fns for fns in os.listdir(ppt_root) if fns.endswith(('.ppt', 'pptx'))):
ppt2png(fn)
方法二:使用win32com导出图片
使用方法:
#将ppt每页转化为图片
# -*- coding: utf-8 -*-
import os
import win32com
import win32com.client
# 存储PPT为JPG格式的类型,所对应的数值
ppSaveAsJPG = 17
def ppt_to_jpg(ppt_file_name,output_dir_name):
'''将PPT另存为JPG格式
arguments:
ppt_file_name: 要转换的ppt文件的完整路径文件名,eg:F:\\test\\ppt_name.ppt
output_dir_name:转换后的存放JPG文件的目录,以PPT的名字新建的目录,eg:F:\\test\\ppt_name
'''
# 启动PPT
ppt_app = win32com.client.Dispatch('PowerPoint.Application')
# 设置为0表示后台运行,不显示,1则显示
ppt_app.Visible = 1
# 打开PPT文件
ppt = ppt_app.Presentations.Open(ppt_file_name)
# 另存为,第一个参数为报存图片的目录,第二个是报存的格式。
ppt.SaveAs(output_dir_name, ppSaveAsJPG)
# 退出PPT
ppt_app.Quit()
if __name__ == '__main__':
# 当前文件所在目录,eg: F:\\test,如果你要指定某个目录,则手动指定current_dir 即可
current_dir=r'E:\Python\pdfjpg\1'
#current_dir = os.sys.path[0]
# 当前目录下所有文件,遍历的结果是文件名。
dir_list = os.listdir(current_dir)
# 当前目录下所有的PPT文件,eg: ppt_name.ppt
ppt_file_names = (fns for fns in dir_list if fns.endswith(('.ppt','.pptx')))
# 当前目录下所有的PPT文件名,这两者的区别在于有无后缀名,eg: ppt_name
# splitext的作用是,'xx.jpg',会分成'xx'和'.jpg'
ppt_names = (os.path.splitext(fns)[0] for fns in dir_list if fns.endswith(('.ppt','.pptx')))
# 因为只需要文件名,这样也行
# ppt_names = (fns.split('.')[0] for fns in ppt_file_names)
for ppt_file_name,ppt_name in zip(ppt_file_names,ppt_names):
# 该PPT的完整路径文件名,eg: F:\\test\\ppt_name.ppt
ppt_file_name = os.path.join(current_dir,ppt_file_name)
# 需要新建一个与PPT同名的文件,获取完整路径,eg: F:\\test\\ppt_name
ppt_dir_path = os.path.join(current_dir,ppt_name)
# 创建新目录
os.mkdir(ppt_dir_path)
# print ppt_file_name, ppt_dir_path
ppt_to_jpg(ppt_file_name,ppt_dir_path)
以上代码均为本渣渣抄袭而来,仅供学习参考,如有疑问,可度娘解答!
来源:
1.Python 将 PPT 中的图片素材批量导出
https://blog.csdn.net/weixin_43575040/article/details/104631516
2.PPT中出现的图片素材批量导出&PPT全部导出生成图片
https://www.cnblogs.com/xiaoqiangink/p/14486735.html
相关阅读:
Python脚本工具,PyMuPDF批量提取PDF文件中的图片
·················END·················
你好,我是二大爷,
革命老区外出进城务工人员,
互联网非早期非专业站长,
喜好python,写作,阅读,英语
不入流程序,自媒体,seo . . .
公众号不挣钱,交个网友。
读者交流群已建立,找到我备注 “交流”,即可获得加入我们~
听说点 “在看” 的都变得更好看呐~
关注关注二大爷呗~给你分享python,写作,阅读的内容噢~
扫一扫下方二维码即可关注我噢~
关注我的都变秃了
说错了,都变强了!
不信你试试
扫码关注最新动态
公众号ID:eryeji