<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天要帶大家實現的是PPT圖片的提取。在我們學習工作中,PPT的使用還是非常頻繁的,但是自己做PPT是很麻煩的,所以就需要用到別人的模板或者素材,這個時候提取PPT圖片就可以減少我們很多工作。
其實實現原理很簡單,我們的pptx檔案其實是一個壓縮包。我們可以直接修改pptx檔案的字尾,改成zip然後解壓,比如下面這個:
這是解壓後的檔案。我們可以在ppt目錄下找到一個media目錄,這個目錄下就是我們要的圖片的。這個目錄包含了PPT的所有多媒體檔案。
知道這點後,我們就可以選擇用Python來解壓出PPT中的media目錄就可以提取出所有圖片了。
在Python中提供了一個zipfile模組用於處理壓縮包檔案。我們來看看它的簡單操作:
from zipfile import ZipFile # 開啟壓縮檔案 f = ZipFile("test.pptx") # 檢視壓縮包所有檔案 for file in f.namelist(): print(file) # 關閉壓縮包檔案 f.close()
輸出的部分結果如下:
[Content_Types].xml
_rels/.rels
ppt/presentation.xml
ppt/slides/_rels/slide2.xml.rels
ppt/slides/slide1.xml
ppt/slides/slide2.xml
ppt/slides/slide3.xml
可以看到我們列印出了壓縮包的檔案。
我們還可以通過下面的方式開啟壓縮包:
from zipfile import ZipFile with ZipFile("test.pptx") as f: for file in f.namelist(): print(file)
通過with
語句,就可以不顯示地呼叫close方法。下面我們看看解壓操作:
from zipfile import ZipFile with ZipFile("test.pptx") as f: for file in f.namelist(): # 解壓檔案 f.extract(file, path="unzip")
解壓檔案的操作通過f.extract
來實現,這裡傳入了兩個引數,分別是壓縮包檔案,和解壓路徑,如果壓縮包有密碼還需要傳入解壓密碼。
然後我們還需要判斷一下,如果是媒體目錄我們才解壓。我們新增一點程式碼:
from zipfile import ZipFile with ZipFile("test.pptx") as f: for file in f.namelist(): # 如果是media目錄下的檔案就解壓 if file.startswith("ppt/media/"): f.extract(file, path="unzip")
這樣我們就實現了PPT圖片的提取。
我們把上面程式碼再完善一下:
import os from zipfile import ZipFile # 解壓目錄 unzip_path = "unzip" # 如果解壓目錄不存在則建立 if not os.path.exists(unzip_path): os.mkdir(unzip_path) with ZipFile("test1/test.pptx") as f: for file in f.namelist(): if file.startswith("ppt/media/"): f.extract(file, path=unzip_path)
這裡我們就是新增了一個解壓目錄的建立,這樣我們執行的時候就不會因為目錄不存在而報錯了。
另外,其實我們手動解壓然後提取PPT中的圖片也是很方便的,也並不會比程式慢。
很多人都知道,Python可以操作Excel,PDF·還有PPT,這篇文章就圍繞Python提取PPT中的文字來寫,包括提取PPT中的藝術字,圖片中的文字。
因為實現環境是linux,所以無法用win32com來實現這個需求,使用extract庫也可以提取PDF,PPT等檔案中的文字,但這裡不用extract來實現,用python-pptx,如果熟悉extract庫一點的也知道,extract中也使用了python-pptx,實現過程也是呼叫了python-pptx。
presentation = pptx.Presentation(fp) results = [] for slide in presentation.slides: for shape in slide.shapes: if shape.has_text_frame: for paragraph in shape.text_frame.paragraphs: part = [] for run in paragraph.runs: part.append(run.text) results.append(''.join(part)) elif isinstance(shape, Picture): content = self.parsepic.request_api(shape.image.blob) results.append(''.join(content)) results = [line for line in results if line.strip()]
程式碼分析:
presentation = pptx.Presentation(fp)
範例化ppt物件,只有範例化Presentation物件才能操作ppt,通過此物件可以存取其他類的介面。
通過presentation存取幻燈片presentation.slides,slides是由每一個幻燈片物件組成的列表。
通過幻燈片物件slide存取包含在此幻燈片上的形狀物件shape,如文字方塊,表格,圖片等
if shape.has_text_frame
判斷形狀物件是否為文字物件
for paragraph in shape.text_frame.paragraphs: part = [] for run in paragraph.runs: part.append(run.text) results.append(''.join(part))
獲取文字方塊的文字,文字方塊中也會出現多個段落內容
elif isinstance(shape, Picture): content = self.parsepic.request_api(shape.image.blob) results.append(''.join(content))
判斷是否為圖片物件或者藝術字物件,這裡是呼叫百度圖片提取文字的介面來提取PPT中包含在圖片中的文字。
def request_api(self, img_data): url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic' # 高進度版 # url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic' postdata = { 'language_type': 'CHN_ENG', # 中英文混合 'detect_direction': 'true', 'image': base64.b64encode(img_data) } headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': random.choice(USER_AGENT['pc']) } r = requests.post(url, params={'access_token': self.get_token()}, data=postdata, headers=headers).json() if r.get('error_code'): raise Exception(r['error_msg']) return [item['words'] for item in r['words_result']]
需要註冊一個賬號,並且開通圖片提取文字的服務,獲取APPKEY, APPSECRETKEY,從而獲取到token,具體介面詳情看百度開發者檔案。
python-pptx官方檔案:https://python-pptx.readthedocs.io/en/latest/api/slides.html#pptx.slide.Slides
到此這篇關於用Python提取PPT中的圖片的文章就介紹到這了,更多相關Python提取PPT的圖片內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45