pdf para jpg sem perda de qualidade; gscan2pdf

40

Quando eu converto um arquivo pdf em um monte de arquivos jpg usando

convert -quality 100 file.pdf page_%04d.jpg

Eu tenho uma perda de qualidade apreciável.

No entanto, se eu fizer o seguinte, não haverá perda de qualidade (perceptível):

Inicie o gscan2pdf, escolha arquivo- > import (e escolha file.pdf). Em seguida, vá para o diretório temporário de gscan2pdf. Existem muitos arquivos pnm (um para cada página do arquivo pdf). Agora eu faço

  for file in *.pnm; do            
  convert $file $file.jpg done

Os arquivos jpg resultantes têm (aproximadamente) a mesma qualidade do pdf original (que é o que eu quero).

Agora a minha pergunta é, se existe uma maneira simples de converter o arquivo pdf para um monte de arquivos jpg sem perda de qualidade perceptível? (A solução acima é muito complicada e demorada).

    
por student 22.04.2011 / 22:02

5 respostas

74

Não está claro o que você quer dizer com "perda de qualidade". Isso pode significar muitas coisas diferentes. Você poderia postar algumas amostras para ilustrar? Talvez corte a mesma seção das versões de baixa qualidade e boa qualidade (como um PNG para evitar mais perda de qualidade).

Talvez você precise usar -density para fazer a conversão em um dpi maior:

convert -density 300 file.pdf page_%04d.jpg

(Você pode prefixar -units PixelsPerInch ou -units PixelsPerCentimeter , se necessário. Minha cópia padrão é ppi.)

Atualização: Como você apontou, gscan2pdf (a maneira como você está usando) é apenas um wrapper para pdfimages (de poppler ). pdfimages não faz a mesma coisa que convert faz quando recebe um PDF como entrada.

convert pega o PDF, renderiza em alguma resolução e usa o bitmap resultante como a imagem de origem.

pdfimages procura no PDF por imagens de bitmap incorporadas e exporta cada uma delas para um arquivo. Ele simplesmente ignora qualquer texto ou comandos de desenho vetorial no PDF.

Como resultado, se o que você tem é um PDF que é apenas um wrapper em torno de uma série de bitmaps, pdfimages fará um trabalho muito melhor de extraí-los, porque ele obtém os dados brutos em seu tamanho original. Você provavelmente também deseja usar a opção -j para pdfimages , porque um PDF pode conter dados JPEG não processados. Por padrão, pdfimages converte tudo em formato PNM e converte JPEG > PPM > JPEG é um processo com perdas.

Então, tente

pdfimages -j file.pdf page

Você pode ou não precisar seguir isso com uma etapa convert to .jpg (dependendo do formato de bitmap usado pelo PDF).

Eu tentei este comando em um PDF que eu fiz de uma sequência de imagens JPEG. Os JPEGs extraídos eram byte a byte idênticos às imagens de origem. Você não pode obter uma qualidade superior a essa.

    
por 22.04.2011 / 22:45
3

a resposta de @cjm está correta, mas se você gosta de GUI e não quer renderizar todas as páginas em pdf, apenas para obter alguma imagem, use o gimp.

Abra um pdf com gimp e você terá uma janela de importação com todas as páginas renderizadas. Escolha as páginas que quiser e defina a resolução para 600 pix / inch (achei 300 muito mais aguçada em muitos casos). Salvar no formato desejado com "Arquivo / exportar"

De qualquer forma, deve haver um sinalizador para selecionar as páginas desejadas na linha de comando.

    
por 10.02.2013 / 14:29
2

Olhando para o código-fonte do gscan2pdf, notei que ele usa pdfimages. Então pdfimages file.pdf page resultaria em page-001.ppm, page-002.ppm etc.

    
por 22.04.2011 / 22:45
2

O que não está claro na sua pergunta é se você fala sobre texto e gráficos vetoriais no seu pdf, ou se o seu pdf contém imagens incorporadas.

Depois de ler sobre o que é o gscan2pdf, meu palpite é que seus arquivos pdf contenham (apenas) gráficos incorporados.

convert essencialmente "imprime" seu pdf sem considerar o conteúdo. Como sugere o @cjm, você pode querer alterar a densidade de impressão. Esta é a única maneira de aumentar a qualidade dos gráficos vetoriais.

Se, em vez disso, o que você deseja fazer é extrair imagens incorporadas (muito parecido com o gscan2pdf parece fazer), adivinhar a densidade geralmente levará a perda de qualidade ou de qualidade superior ao necessário (e desperdício de espaço em disco). A resposta então é extrair a imagem em vez de imprimir o pdf. Veja este artigo que basicamente defende o uso de pdfimages para extrair imagens sem perda de qualidade.

    
por 23.04.2011 / 06:07
1

Como a resposta do aluno disse pdfimages é uma boa opção. Da minha experiência, tanto gs como convert exportam para baixa qualidade, independentemente de você especificar o dpi correto.

Mas se o pdf tiver várias camadas por página pdfimages não funciona e extrai as camadas como imagem separada, nesse caso, o melhor é usar inskcape para exportar a página como é visto.

Estes são os comandos que eu uso:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

Primeiro comando divide todas as páginas segundo comando converte página por página para png. Você pode mantê-los png ou apenas convertê-los em jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Em comparação com pdfimages , gs e convert do ImageMagick, acho que as exportações de inkscape são as melhores em qualidade.

    
por 07.02.2018 / 18:38