首頁  >  文章  >  後端開發  >  如何使用 Python 從 PDF 提取高解析度圖像而無需重新採樣?

如何使用 Python 從 PDF 提取高解析度圖像而無需重新採樣?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-22 07:52:02686瀏覽

How to Extract High-Resolution Images from PDFs Without Resampling Using Python?

如何在 Python 中從 PDF 中提取圖像而無需重新採樣?

以原始解析度和格式從 PDF 文件中擷取影像,無需重新取樣重新取樣,您可以使用 PyMuPDF 模組。這個 Python 模組可讓您有效率地處理 PDF 文件並操作其內容。以下是如何使用 PyMuPDF 提取圖像:

<code class="python">import fitz

doc = fitz.open("input.pdf")
for page_num in range(len(doc)):
    for img in doc.getPageImageList(page_num):
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)
        if pix.n < 5:  # Check if it's grayscale or RGB
            pix.writePNG(f"page_{page_num}_img_{xref}.png")
        else:  # Convert CMYK to RGB before saving
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG(f"page_{page_num}_img_{xref}.png")</code>

在此程式碼中,我們迭代 PDF 中的頁面和圖像。 “xref”變數表示圖像的唯一識別碼。根據影像的色彩空間(RGB 或 CMYK),我們可以直接寫入 PNG 影像,也可以在儲存之前將 CMYK 轉換為 RGB。

或者,如果您使用的是fitz 版本1.19.6,則可以使用以下程式碼執行提取,並帶有進度條以獲得更好的可視性:

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

workdir = "path_to_pdf_folder"

for each_path in os.listdir(workdir):
    if ".pdf" in each_path:
        doc = fitz.Document(os.path.join(workdir, each_path))

        for i in tqdm(range(len(doc)), desc="pages"):
            for img in tqdm(doc.get_page_images(i), desc="page_images"):
                xref = img[0]
                image = doc.extract_image(xref)
                pix = fitz.Pixmap(doc, xref)
                pix.save(os.path.join(workdir, f"{each_path[:-4]}_p{i}-{xref}.png"))</code>

這些程式碼片段將使您能夠從PDF 中提取圖像,並保留其原始解析度和格式。

以上是如何使用 Python 從 PDF 提取高解析度圖像而無需重新採樣?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn