问个技术问题——PPT内图片如何按照标题批量保存?
- magicsword如图。教师狗又来求助了。
有好多个ppt,每个ppt里有100张图片吧,图片上方有标题。比如:小狗(然后下面跟着一只狗的图片)。
现在想批量把里面的图片全部保存出来,然后按照slide里的标题自动重命名。
试了半天,另存为的时候全都是按照slide1, slide2这种命名格式。搜了一下谷歌也没找到技巧。
D版求一下,希望大神能教我。 - segula后缀名改成rar或zip,打开后在media里面找
- magicsword这个我会啊,但是同另存为的效果是一样的,重命名规则都是按照slide1 slide2来的,我想一劳永逸,按照标题进行命名。
- 729088672写个程序或者脚本吧
- magicsword
逼我去学Python啊。。。 - 729088672或者花钱让人工导出
- ilovlowphy正好最近在学python, 抽空给你写了段程序. 看看能不能满足你. 需要python环境, 安装python-pptx库.地址是https://github.com/ilovlowphy/get_pictures_from_pptx复制代码
- from pptx import Presentation, shapes
- import os, re
- def get_img_name_from_string(text):
- return re.sub('[\/:*?"<>|]','-',text) #去掉非法字符
- def get_pictures_from_pptx(pptx):
- current_dir, pptx_name = os.path.split(pptx)
- img_dir = os.path.join(current_dir,os.path.splitext(pptx_name)[0])
- if not os.path.exists(img_dir):
- os.makedirs(img_dir)
- prs = Presentation(pptx)
- for i, slide in enumerate(prs.slides):
- page = i+1
- texts = []
- imgs = []
- for shape in slide.shapes:
- if shape.has_text_frame:
- for paragraph in shape.text_frame.paragraphs:
- for run in paragraph.runs:
- texts.append(run.text)
- elif isinstance(shape, shapes.picture.Picture):
- imgs.append(shape.image)
- if not imgs:
- continue
- if texts:
- filename = get_img_name_from_string('_'.join(texts))[:20]
- else:
- filename = 'slide_'+str(page)
- if len(imgs) ==1:
- full_file_name = os.path.join(img_dir,filename+ '.'+ imgs[0].ext)
- if os.path.exists(full_file_name):
- full_file_name = os.path.join(img_dir,filename+ '_slide_'+str(page)+'.'+ imgs[0].ext)
- with open(full_file_name,'wb') as f:
- f.write(imgs[0].blob)
- else:
- for i, img in enumerate(imgs):
- full_file_name = os.path.join(img_dir,filename+'_'+ str(i)+ '.'+ imgs[0].ext)
- if os.path.exists(full_file_name):
- full_file_name = os.path.join(img_dir,filename+'_'+ str(i)+'_slide_'+str(page)+ '.'+ imgs[0].ext)
- with open(full_file_name,'wb') as f:
- f.write(img.blob)
- if __name__ == '__main__':
- current_dir = os.sys.path[0]
- print(current_dir)
- dir_list = os.listdir(current_dir)
- ppt_file_names = (fns for fns in dir_list if fns.endswith('.pptx'))
- ppt_names = (os.path.splitext(fns)[0] for fns in dir_list if fns.endswith('.pptx'))
- for pptx in ppt_file_names:
- get_pictures_from_pptx(pptx)
- from pptx import Presentation, shapes
- magicsword感谢大神帮忙。。。Python看起来真是非常有用了。。