校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > python 三種方法提取pdf中的圖片

python 三種方法提取pdf中的圖片

熱門標簽:申請辦個400電話號碼 400電話辦理費用收費 外呼系統前面有錄音播放嗎 鎮江人工外呼系統供應商 高德地圖標注字母 騰訊地圖標注有什么版本 千呼ai電話機器人免費 柳州正規電銷機器人收費 深圳網絡外呼系統代理商

有時我們需要將一份或者多份PDF文件中的圖片提取出來,如果采取在線的網站實現的話又擔心圖片泄漏,手動操作又覺得麻煩,其實用Python也可以輕松搞定!
今天就跟大家系統分享幾種Python提取 PDF 圖片的方法。其實沒有非常完美的方法,每種方法提取效率都不是百分之百,因此可以考慮用多種方法進行互補,主要將涉及:

  • 基于 fitz 庫和正則搜索提取圖片
  • 基于 pdf2image 庫的兩種方法提取圖片

基于 fitz 庫和正則搜索

fitz 是 pymupdf 的子模塊,需要先用命令行安裝 pymupdf:

pip install pymupdf

但注意導入時使用 import fitz 導入模塊!

下面的代碼就利用 fitz 庫提取圖片需要通過正則匹配圖片元素,將模板元素轉化為像素后再以圖片形式寫出

import fitz
import re
import os

file_path = r'C:\xxx\xxx.pdf' # PDF 文件路徑
dir_path = r'C:\xxx' # 存放圖片的文件夾

def pdf2image1(path, pic_path):
  checkIM = r"/Subtype(?= */Image)"
  pdf = fitz.open(path)
  lenXREF = pdf._getXrefLength()
  count = 1
  for i in range(1, lenXREF):
    text = pdf._getXrefString(i)
    isImage = re.search(checkIM, text)
    if not isImage:
      continue
    pix = fitz.Pixmap(pdf, i)
    new_name = f"img_{count}.png"
    pix.writePNG(os.path.join(pic_path, new_name))
    count += 1
    pix = None

pdf2image1(file_path, dir_path)

運行提取示例文件后結果如下:

可以看到,有一些很小的色塊也被提取成圖片,那么怎么過濾掉它們呢?

有一個簡單的方法是通過大小過濾,pix 像素在 fitz 庫中存在一個重要的方法 pix.size 可以反映像素多少,簡單的色素塊該值較低,可以通過設置一個閾值過濾。以閾值 10000 為例過濾:

import fitz
import re
import os

file_path = r'C:\xxx\xxx.pdf' # PDF 文件路徑
dir_path = r'C:\xxx' # 存放圖片的文件夾

def pdf2image1(path, pic_path):
  checkIM = r"/Subtype(?= */Image)"
  pdf = fitz.open(path)
  lenXREF = pdf._getXrefLength()
  count = 1
  for i in range(1, lenXREF):
    text = pdf._getXrefString(i)
    isImage = re.search(checkIM, text)
    if not isImage:
      continue
    pix = fitz.Pixmap(pdf, i)
    if pix.size  10000: # 在這里添加一處判斷一個循環
      continue # 不符合閾值則跳過至下
    new_name = f"img_{count}.png"
    pix.writePNG(os.path.join(pic_path, new_name))
    count += 1
    pix = None

pdf2image1(file_path, dir_path)

可以看到,全部圖片都被正常提取!

基于 pdf2image 庫的兩種方法

一看名字就知道這個庫的用處了,官方文檔為https://www.cnpython.com/pypi/pdf2image

可以簡單通過 pip install pdf2image 安裝,但poppler才是真正起做用的轉換器,因此需要額外安裝和配置:

  • windows用戶必須安裝poppler for Windows,然后將bin/文件夾添加到PATH
  • Mac用戶必須安裝poppler for Mac

具體發揮作用的代碼官方文檔也給出了詳細的說明:

那么我們就分別嘗試這兩種方法:

from pdf2image import convert_from_path,convert_from_bytes
import tempfile
from pdf2image.exceptions import PDFInfoNotInstalledError, PDFPageCountError, PDFSyntaxError
import os

file_path = r'C:\xxx\xxx.pdf' # PDF 文件路徑
dir_path = r'C:\xxx' # 存放圖片的文件夾

def pdf2image2(file_path, dir_path):
  images = convert_from_path(file_path, dpi=200)
  for image in images:
    if not os.path.exists(dir_path):
      os.makedirs(dir_path)
    image.save(file_path + f'\img_{images.index(image)}.png', 'PNG')

pdf2image2(file_path, dir_path)

可以成功提取圖片。再試試第二種方法:

from pdf2image import convert_from_path,convert_from_bytes
import tempfile
from pdf2image.exceptions import PDFInfoNotInstalledError, PDFPageCountError, PDFSyntaxError
import os

file_path = r'C:\xxx\xxx.pdf' # PDF 文件路徑
dir_path = r'C:\xxx' # 存放圖片的文件夾

def pdf2image3(file_path, dir_path):
  images = convert_from_bytes(open(file_path, 'rb').read())
  for image in images:
    if not os.path.exists(dir_path):
      os.makedirs(dir_path)
    image.save(file_path + f'\img_{images.index(image)}.png', 'PNG')

pdf2image3(file_path, dir_path)

可以看到結果和之前一致,PDF中全部圖片都被提取出來!

再補充一下。核心方法covert_from_bytes包含大量參數,可以自行修改。幾個常用參數總結如下:

參數

意義

pdf_path

PDF 文檔路徑

dpi

圖像質量(如果是學術期刊雜志常見 300dpi)

output_folder

將生成的圖像寫入文件夾(而不是直接寫入內存)

first_page

起始轉換頁數

last_page

轉換至哪一頁

fmt

圖像格式,可以指定為 png,默認為 ppm

thread_count

允許參與轉換的線程數

userpw

PDF 的密碼

output_file

輸出文件名

poppler_path

指定 poppler 的安裝路徑,一開始配置好就無需指定

值得一提的是thread_count 參數,可以啟動多線程會大大加快轉換速度,尤其是 PDF 頁面較多時。有興趣的讀者可以做嘗試。

以上就是python 三種方法提取pdf中的圖片的詳細內容,更多關于python 提取pdf中的圖片的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python解析PDF程序代碼
  • python實現csdn全部博文下載并轉PDF
  • Python合并多張圖片成PDF
  • Python提取PDF指定內容并生成新文件
  • 詳解用Python把PDF轉為Word方法總結
  • python操作mysql、excel、pdf的示例
  • python pdfkit 中文亂碼問題的解決方案
  • Python實現給PDF添加水印的方法
  • Python讀取pdf表格寫入excel的方法
  • Python 多張圖片合并成一個pdf的參考示例

標簽:平頂山 海南 大慶 烏蘭察布 郴州 烏蘭察布 合肥 哈爾濱

巨人網絡通訊聲明:本文標題《python 三種方法提取pdf中的圖片》,本文關鍵詞  python,三種,方法,提取,pdf,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 三種方法提取pdf中的圖片》相關的同類信息!
  • 本頁收集關于python 三種方法提取pdf中的圖片的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 汉沽区| 建始县| 会宁县| 昌江| 冀州市| 平泉县| 犍为县| 南川市| 西畴县| 南乐县| 崇明县| 神池县| 黔江区| 旌德县| 黄山市| 黑水县| 巩留县| 北碚区| 石门县| 隆德县| 金堂县| 旌德县| 郸城县| 通州区| 北票市| 福鼎市| 同心县| 马鞍山市| 凤阳县| 宁安市| 翼城县| 新丰县| 微博| 驻马店市| 安阳县| 额尔古纳市| 普洱| 宣城市| 德令哈市| 周口市| 全南县|