如何在Python中以本機解析度和格式從PDF文件中擷取影像?

Patricia Arquette
發布: 2024-10-22 07:55:30
原創
572 人瀏覽過

How to Extract Images from PDF Documents with Native Resolution and Format in Python?

以原始解析度和格式從PDF 文件中擷取影像

處理PDF 文件時,可以使用原始解析度和格式擷取影像至關重要的。這可確保擷取的影像保留與來源文件相同的品質和完整性。在本文中,我們提出了一種使用 Python 從 PDF 文件中提取圖像而無需重新採樣的解決方案,使您能夠獲得原始格式的高品質圖像。

用於影像擷取的 PyMuPDF

用於 PDF 操作的最流行的 Python 模組之一是 PyMuPDF。該模組提供了一種從 PDF 文件中提取圖像的強大方法,同時保留其原始解析度和格式。以下是使用 PyMuPDF 的程式碼片段:

<code class="python">import fitz

# Open the PDF document
doc = fitz.open("file.pdf")

# Iterate through pages and images
for i in range(len(doc)):
    for img in doc.getPageImageList(i):
        xref = img[0]

        # Convert picture object to PNG
        pix = fitz.Pixmap(doc, xref)
        if pix.n < 5:  # grayscale or RGB
            pix.writePNG("p%s-%s.png" % (i, xref))
        else:  # CMYK
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG("p%s-%s.png" % (i, xref))
            pix1 = None</code>
登入後複製

此程式碼迭代 PDF 文件中的所有頁面和圖像,並將它們提取為 PNG 檔案。它保留了每個影像的原始解析度和格式,確保您獲得高品質的影像。

更新 PyMuPDF 的修改版本

如果您使用的是較新版本PyMuPDF 版本(例如 1.19.6),您可能需要稍微修改上面的程式碼。以下程式碼片段反映了必要的變更:

<code class="python">import os
import fitz
from tqdm import tqdm

# Set working directory
workdir = "your_folder"

# Process PDF files in the directory
for each_path in os.listdir(workdir):
    if ".pdf" in each_path:
        # Open the PDF document
        doc = fitz.Document((os.path.join(workdir, each_path)))

        # Iterate through pages and images
        for i in tqdm(range(len(doc)), desc="pages"):
            for img in tqdm(doc.get_page_images(i), desc="page_images"):
                xref = img[0]

                # Extract the image and save it as PNG
                image = doc.extract_image(xref)
                pix = fitz.Pixmap(doc, xref)
                pix.save(os.path.join(workdir, "%s_p%s-%s.png" % (each_path[:-4], i, xref)))

# Print a completion message
print("Done!")</code>
登入後複製

此修改後的程式碼使用 get_page_images() 方法取得映像並將其儲存為指定工作目錄中的 PNG 檔案。

以上是如何在Python中以本機解析度和格式從PDF文件中擷取影像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!