ホームページ  >  記事  >  バックエンド開発  >  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。