Extrair imagens do PDF
Extraia todas as imagens incorporadas de um PDF e baixe individualmente ou como um .zip. Sem upload.
- Solte um PDF ou clique em "procurar".
- Clique em "Extrair imagens" — uma grade de miniaturas aparece.
- Clique em qualquer miniatura para baixar essa imagem, ou "Baixar todas como .zip" para um pacote.
- Imagens são salvas como PNG; a codificação original é decodificada primeiro em um canvas.
O que ele faz?
Percorre cada página do PDF, localiza cada operação paintImageXObject e extrai o bitmap de imagem subjacente. Cada imagem extraída é normalizada para PNG via canvas — fontes JPEG perdem sua compressão original, mas os pixels de saída são os mesmos que o PDF renderizou. Imagens guardadas em codecs não suportados (JBIG2, CCITT para fax, JPX para JPEG 2000) são reportadas no contagem mas não decodificadas — isso requereria bibliotecas de codec dedicadas além do pdfjs-dist.
Problemas comuns
Extração de imagens PDF é fundamentalmente dependente de codec. A maioria dos PDFs funciona — esses são os padrões em que a extração pode produzir resultados surpreendentes.
- Codecs de imagem não suportados. JBIG2 (alguns documentos digitalizados), CCITT (digitalizações estilo fax) e JPEG 2000 (JPX) não são decodificados. A linha de status reporta quantos foram pulados. Para extrair esses, renderize via /pdf-to-images — isso rasteriza a página inteira incluindo a imagem.
- Qualidade JPEG original perdida. Imagens são exportadas como PNG para preservar transparência e evitar artefatos de dupla compressão. Se sua fonte foi um JPEG embutido no PDF, a saída PNG é maior mas pixel-idêntica ao que o pdf-lib decodificou.
- Imagens inline perdidas. Alguns PDFs usam dados de imagem inline (operadores BI/ID/EI) em vez de XObjects — tipicamente imagens muito pequenas. v1 não as extrai. A maioria das fotos e screenshots são XObjects e são extraídos corretamente.
- Mesma imagem, várias vezes. PDFs frequentemente referenciam um XObject de imagem de várias páginas. v1 extrai a imagem uma vez por chamada paintImageXObject, então um logo duplicado aparecerá uma vez por uso. Deduplique por nome de arquivo ou hash se necessário.
- PDFs criptografados. PDFs protegidos por senha não podem ser abertos sem a senha. Passe-os por /pdf-unlock primeiro se você tem a senha do dono.
- PDFs muito grandes. Cada imagem extraída vive na memória do navegador até você limpar ou navegar. PDFs com centenas de imagens em alta resolução podem usar 100s de MB de RAM. Use o download .zip rapidamente e clique em Limpar quando terminar.
Perguntas frequentes
Por que minhas imagens são PNG, não JPG?
PNG preserva transparência e evita artefatos de re-codificação. Os pixels são os mesmos que o original; o arquivo é maior porque PNG é sem perdas. Para economizar espaço, passe o resultado por /image-compress em modo WebP.
Como sei de qual página cada imagem veio?
Nomes de arquivo seguem o padrão `pageN-imgM.png` — N é o número da página fonte, M é um número de sequência dentro daquela página. Ordene por nome de arquivo para ver a ordem em que aparecem no PDF.
Imagens criptografadas saem embaralhadas?
Dados de imagem dentro de um PDF não criptografado não são separadamente criptografados — decodificam normalmente. Se o PDF em si é criptografado, a ferramenta não pode lê-lo nem um pouco (veja a nota sobre PDFs criptografados acima).
Por que a contagem é maior que as imagens visíveis?
Alguns PDFs usam múltiplos XObjects de imagem por imagem visível (ex.: um canal alpha soft-mask guardado como uma imagem em escala de cinza separada). v1 extrai cada um — o soft-mask é o que faz a imagem principal parecer correta quando composta, mas sozinho aparece como uma silhueta preto e branco.
Meu PDF é enviado para algum lugar?
Não. Tudo roda no seu navegador — seu PDF é parseado por pdfjs-dist e bitmaps de imagem são renderizados via canvas, tudo do lado do cliente. Nenhuma requisição de rede é disparada.
Que tamanho de PDF posso extrair?
Até cerca de 100 MB de PDF antes do navegador começar a ficar lento. O limite duro é a memória da sua aba — se a extração der OOM, divida o PDF via /pdf-split e rode cada seção separadamente.