Como Extrair Todas as Imagens de um PDF com Python

Como Extrair Todas as Imagens de um PDF com Python

A extração de imagens embutidas em arquivos PDF costuma exigir o parsing de objetos gráficos complexos do formato. Utilizando a biblioteca PyMuPDF (módulo fitz), é possível localizar os contêineres de imagem em cada página e salvar os arquivos brutos diretamente no disco sem perder a qualidade original. Essa abordagem resolve a necessidade de automatizar a raspagem de ativos visuais em relatórios, livros e documentos digitalizados.

Python
import os
import fitz  # PyMuPDF

def extrair_imagens_pdf(caminho_pdf, pasta_destino="imagens_extraidas"):
    # Garante que a pasta de destino exista
    os.makedirs(pasta_destino, exist_ok=True)
    
    # Abre o arquivo PDF
    documento = fitz.open(caminho_pdf)
    contador = 0

    # Percorre cada página do documento
    for num_pagina in range(len(documento)):
        pagina = documento[num_pagina]
        lista_imagens = pagina.get_images(full=True)

        # Itera sobre todas as imagens encontradas na página atual
        for idx, img in enumerate(lista_imagens):
            xref = img[0]  # Referência do objeto de imagem no PDF
            
            # Extrai os dados brutos da imagem
            imagem_base = documento.extract_image(xref)
            bytes_imagem = imagem_base["image"]
            extensao = imagem_base["ext"]  # Extensão original (png, jpeg, etc.)

            # Define o nome e salva o arquivo no disco
            nome_arquivo = f"pag_{num_pagina + 1}_img_{idx + 1}.{extensao}"
            caminho_completo = os.path.join(pasta_destino, nome_arquivo)

            with open(caminho_completo, "wb") as f:
                f.write(bytes_imagem)
            
            contador += 1

    documento.close()
    print(f"Extração concluída! {contador} imagem(ns) salva(s) em '{pasta_destino}'.")

# Exemplo prático de execução
if __name__ == "__main__":
    # Substitua pelo caminho do seu arquivo PDF
    extrair_imagens_pdf("documento_exemplo.pdf")
  • Desempenho com C (PyMuPDF): A biblioteca fitz é um wrapper sobre o motor C MuPDF, tornando o processo de leitura e renderização drasticamente mais rápido que outras bibliotecas puramente em Python.

  • Preservação de Formato Nativo: O método extract_image(xref) obtém os bytes nativos da imagem e sua extensão original (png, jpeg, tiff), sem a necessidade de reprocessar ou recompactar a imagem.

  • Referência xref: Trata-se do número identificador do objeto dentro da estrutura do PDF. Usar o xref garante que você está acessando a imagem exata do catálogo do arquivo.

  • Instalação do Pacote: O módulo é instalado via terminal executando pip install PyMuPDF (embora seja importado no código com a instrução import fitz).

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server