在辦公場景當中,同樣也有這樣一個需求,那就是快速批量把PPT檔案中的圖檔提取出來,畢竟一個個點選另存為太過于繁瑣,以及耗費時間,前面本渣渣分享過如何應用Python批量提取PDF檔案中的圖檔,而這一篇本渣渣就為大家分享如何應用Python批量提取PPT檔案中的圖檔。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SYmlTZ0YjNkdjNhBjYhVTN3UmNkFGZ3MDN5QGZlRjMh9CX5EzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
其實不通過代碼腳本的形式也可以快速友善的提取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)
以上代碼均為本渣渣抄襲而來,僅供學習參考,如有疑問,可度娘解答!