PDF圖片提取

本文作者:王碧琪
文字編輯:戴 雯
技術總編:張 邯

之前我們使用pymupdf提取了PDF文檔中的文本信息菜枷,那么對于圖片信息沦偎,也可以進行一波提取木张。今天我們一起來試試迁筛。

一煤蚌、簡介

待提取PDF文檔“demo1”內(nèi)容如下:


image

可以觀察到,該文檔中共有4張圖片细卧。提取思路為:首先得到PDF文檔的所有對象尉桩,然后遍歷它們判斷是否是圖片類型,再將圖片信息寫入贪庙,最后保存為png格式文件蜘犁。

二、圖片提取

(一)引入相應的庫

import fitz #處理PDF
import re #使用正則表達式
import os #進行相關路徑的判斷

(二)導入PDF&創(chuàng)建導出圖片的文件夾

path = r"F: \pdfs\demo1.pdf" #導入的pdf的路徑
pic_path = r"F: \ima" #導出圖片的文件夾
if not os.path.exists(pic_path):
    os.mkdir(pic_path)
else:
    print("文件夾已存在插勤,不必重建沽瘦!")

doc = fitz.open(path) #打開pdf文件
lenXREF = doc.xrefLength()-1 #獲取對象數(shù)量長度
print(f"文件名:{path}, 頁數(shù): {doc.pageCount}, 對象: {lenXREF}") # 打印PDF的信息

運行結果為:

文件夾已存在革骨,不必重建!
文件名:F: \pdfs\demo1.pdf, 頁數(shù): 3, 對象: 54

xrefcross-reference的縮寫析恋。xref比現(xiàn)有對象的數(shù)量大一個良哲,所以可以用Document.xrefLength()-1得到PDF文檔中的對象總數(shù)。結果顯示:demo1文檔有3頁助隧,54個對象筑凫。

(三)遍歷對象,定位圖片

for i in range(1, lenXREF):
    print(i)
    text = doc.xrefObject(i)  #得到xref對象的相關信息
    print(text)

部分結果如下:

image

可以看到其中記錄了每一個對象的信息并村。例如對象3巍实,它是一個圖片,text中記錄了它的type和subtype哩牍。我們利用subtype標記為image這一點棚潦,來定位圖片。

checkIM = r"/Subtype(?= */Image)" # 使用正則表達式來查找圖片
for i in range(1, lenXREF):
    text = doc.xrefObject(i) # 定義對象字符串       
    isImage = re.search(checkIM, text) # 查看是否是image
    if isImage:
        print(i)

運行結果為:

3
4
7
32

這樣就定位到了文檔中的4張圖片膝昆。

(四)提取圖片

使用fitz.Pixmap(doc,xref)函數(shù)創(chuàng)建pixmap丸边。像素圖的屬性(寬度、高度等)將反映圖像的屬性荚孵。這里的xref要對應上面定位到的圖片的xref標號妹窖。使用pixmap對象的writePNG(filename)函數(shù),可以將pixmap保存為png格式的圖片收叶。

imgcount = 0  # 圖片計數(shù)
for i in range(1, lenXREF):
    text = doc.xrefObject(i) # 定義對象字符串       
    isImage = re.search(checkIM, text) # 查看是否是image
    if not isImage: # 如果不是圖片骄呼,則進行下一個判斷
        continue     
    imgcount += 1 #圖片計數(shù)
    pix = fitz.Pixmap(doc, i) # 生成圖像對象    
    new_name = f"圖片{imgcount}.png" # 生成圖片的名稱
    print(new_name)
    pix.writePNG(os.path.join(pic_path, new_name))
    pix = None 

運行結果是:

圖片1.png
圖片2.png
圖片3.png
圖片4.png

去目標文件夾看一下,成功提取了相應的圖片:

image
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末判没,一起剝皮案震驚了整個濱河市蜓萄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哆致,老刑警劉巖绕德,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摊阀,居然都是意外死亡耻蛇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門胞此,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臣咖,“玉大人,你說我怎么就攤上這事漱牵《嵘撸” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵酣胀,是天一觀的道長刁赦。 經(jīng)常有香客問我娶聘,道長,這世上最難降的妖魔是什么甚脉? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任丸升,我火速辦了婚禮,結果婚禮上牺氨,老公的妹妹穿的比我還像新娘狡耻。我一直安慰自己,他們只是感情好猴凹,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布夷狰。 她就那樣靜靜地躺著,像睡著了一般郊霎。 火紅的嫁衣襯著肌膚如雪沼头。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天歹篓,我揣著相機與錄音瘫证,去河邊找鬼。 笑死庄撮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的毙籽。 我是一名探鬼主播洞斯,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坑赡!你這毒婦竟也來了烙如?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤毅否,失蹤者是張志新(化名)和其女友劉穎亚铁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體螟加,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡徘溢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捆探。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片然爆。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖黍图,靈堂內(nèi)的尸體忽然破棺而出曾雕,到底是詐尸還是另有隱情,我是刑警寧澤助被,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布剖张,位于F島的核電站切诀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搔弄。R本人自食惡果不足惜幅虑,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肯污。 院中可真熱鬧翘单,春花似錦、人聲如沸蹦渣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柬唯。三九已至认臊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锄奢,已是汗流浹背失晴。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拘央,地道東北人涂屁。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像灰伟,于是被迫代替她去往敵國和親拆又。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容