问个技术问题——PPT内图片如何按照标题批量保存?

  • m
    magicsword
    如图。教师狗又来求助了。
    有好多个ppt,每个ppt里有100张图片吧,图片上方有标题。比如:小狗(然后下面跟着一只狗的图片)。

    现在想批量把里面的图片全部保存出来,然后按照slide里的标题自动重命名。

    试了半天,另存为的时候全都是按照slide1, slide2这种命名格式。搜了一下谷歌也没找到技巧。

    D版求一下,希望大神能教我。
  • s
    segula
    后缀名改成rar或zip,打开后在media里面找
  • m
    magicsword
    这个我会啊,但是同另存为的效果是一样的,重命名规则都是按照slide1 slide2来的,我想一劳永逸,按照标题进行命名。
  • 7
    729088672
    写个程序或者脚本吧
  • m
    magicsword

    逼我去学Python啊。。。
  • 7
    729088672
    或者花钱让人工导出
  • i
    ilovlowphy
    正好最近在学python, 抽空给你写了段程序. 看看能不能满足你. 需要python环境, 安装python-pptx库.地址是https://github.com/ilovlowphy/get_pictures_from_pptx
    1. from pptx import Presentation, shapes
    2. import os, re

    3. def get_img_name_from_string(text):
    4. return re.sub('[\/:*?"<>|]','-',text) #去掉非法字符

    5. def get_pictures_from_pptx(pptx):
    6. current_dir, pptx_name = os.path.split(pptx)
    7. img_dir = os.path.join(current_dir,os.path.splitext(pptx_name)[0])
    8. if not os.path.exists(img_dir):
    9. os.makedirs(img_dir)
    10. prs = Presentation(pptx)
    11. for i, slide in enumerate(prs.slides):
    12. page = i+1
    13. texts = []
    14. imgs = []
    15. for shape in slide.shapes:
    16. if shape.has_text_frame:
    17. for paragraph in shape.text_frame.paragraphs:
    18. for run in paragraph.runs:
    19. texts.append(run.text)
    20. elif isinstance(shape, shapes.picture.Picture):
    21. imgs.append(shape.image)
    22. if not imgs:
    23. continue
    24. if texts:
    25. filename = get_img_name_from_string('_'.join(texts))[:20]
    26. else:
    27. filename = 'slide_'+str(page)
    28. if len(imgs) ==1:
    29. full_file_name = os.path.join(img_dir,filename+ '.'+ imgs[0].ext)
    30. if os.path.exists(full_file_name):
    31. full_file_name = os.path.join(img_dir,filename+ '_slide_'+str(page)+'.'+ imgs[0].ext)
    32. with open(full_file_name,'wb') as f:
    33. f.write(imgs[0].blob)
    34. else:
    35. for i, img in enumerate(imgs):
    36. full_file_name = os.path.join(img_dir,filename+'_'+ str(i)+ '.'+ imgs[0].ext)
    37. if os.path.exists(full_file_name):
    38. full_file_name = os.path.join(img_dir,filename+'_'+ str(i)+'_slide_'+str(page)+ '.'+ imgs[0].ext)
    39. with open(full_file_name,'wb') as f:
    40. f.write(img.blob)


    41. if __name__ == '__main__':
    42. current_dir = os.sys.path[0]
    43. print(current_dir)
    44. dir_list = os.listdir(current_dir)
    45. ppt_file_names = (fns for fns in dir_list if fns.endswith('.pptx'))
    46. ppt_names = (os.path.splitext(fns)[0] for fns in dir_list if fns.endswith('.pptx'))
    47. for pptx in ppt_file_names:
    48. get_pictures_from_pptx(pptx)
    复制代码
  • m
    magicsword
    感谢大神帮忙。。。Python看起来真是非常有用了。。