Maison  >  Article  >  développement back-end  >  Comment pouvez-vous extraire des images de PDF à l'aide de Python tout en préservant leur résolution d'origine ?

Comment pouvez-vous extraire des images de PDF à l'aide de Python tout en préservant leur résolution d'origine ?

DDD
DDDoriginal
2024-10-22 07:52:30686parcourir

How Can You Extract Images from PDFs Using Python While Preserving Their Original Resolution?

Extraire des images de PDF sans rééchantillonnage à l'aide de Python

Pour extraire efficacement toutes les images d'un document PDF tout en préservant leur résolution et leur format d'origine sans rééchantillonnage , vous pouvez utiliser le module PyMuPDF. Ce module fournit une solution efficace pour l'extraction d'images, en produisant des images sous forme de fichiers PNG.

Utilisation de PyMuPDF :

<code class="python">import fitz

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

# Iterate through the pages
for i in range(len(doc)):
    # Extract images from the current page
    for img in doc.getPageImageList(i):
        # Retrieve the image's XREF and create a Pixmap
        xref = img[0]
        pix = fitz.Pixmap(doc, xref)

        # Check if the image is grayscale or RGB
        if pix.n < 5:
            # Save the image in PNG format
            pix.writePNG("p%s-%s.png" % (i, xref))

        # If the image is CMYK, convert it to RGB and save
        else:
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG("p%s-%s.png" % (i, xref))
            pix1 = None

        # Release the Pixmaps
        pix = None</code>

Améliorations :

Pour une version mise à jour du script prenant en charge fitz 1.19.6 :

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

# Specify the work directory
workdir = "your_folder"

# Iterate through the PDFs 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))

        for i in tqdm(range(len(doc)), desc="pages"):
            for img in tqdm(doc.get_page_images(i), desc="page_images"):
                # Extract the image and save as PNG
                xref = img[0]
                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)))</code>

Ce script amélioré fournit des barres de progression pour une visibilité accrue et enregistre les images extraites avec des conventions de dénomination de fichiers cohérentes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn