天天看點

Python工具源碼,Python批量提取PPT檔案中的圖檔

在辦公場景當中,同樣也有這樣一個需求,那就是快速批量把PPT檔案中的圖檔提取出來,畢竟一個個點選另存為太過于繁瑣,以及耗費時間,前面本渣渣分享過如何應用Python批量提取PDF檔案中的圖檔,而這一篇本渣渣就為大家分享如何應用Python批量提取PPT檔案中的圖檔。

Python工具源碼,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)
    
           
Python工具源碼,Python批量提取PPT檔案中的圖檔
Python工具源碼,Python批量提取PPT檔案中的圖檔

方法二:使用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)
        
           
Python工具源碼,Python批量提取PPT檔案中的圖檔
Python工具源碼,Python批量提取PPT檔案中的圖檔

以上代碼均為本渣渣抄襲而來,僅供學習參考,如有疑問,可度娘解答!