Rápida conversão de pdf para jpg no Linux desejada [fechada]

10

Atualmente, estou usando o Imagemagick para converter PDFs em imagens de varredura JPEG. É dolorosamente lento e consome muita memória.

O comando que usei foi:

convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg

Eu acho que é lento porque usa ghostscript. Mas deve haver uma maneira mais rápida de fazer isso em uma caixa Linux.

Alguém encontrou uma solução melhor?

felicidades tapete

    
por mat3001 05.08.2010 / 23:41

4 respostas

16

Usar o Ghostscript diretamente (em vez de usar o comando convert do ImageMagick, que chama o Ghostscript indiretamente) é realmente mais rápido. Além disso, você tem mais controle sobre os parâmetros de conversão. Experimente

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d.jpg \
   -dJPEGQ=95      \
   -r600x600       \
   -g4960x7016     \
   foo.pdf

onde

  • -o : determina o caminho de saída + nome do arquivo (e economiza o uso de -dBATCH -dNOPAUSE )
  • -dJPEGQ : define a qualidade JPEG para 95%
  • -r : define a resolução para 600 dpi
  • -g : define o tamanho da imagem para 4960x7016px
  • -sDEVICE : define a saída como JPEG

Este comando provavelmente continuará lento e criará arquivos maiores que o esperado. Para tamanhos de arquivo menores e execução mais rápida, tente isso (o que provavelmente se aproxima da qualidade de saída da linha de comando convert ):

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_200dpi_q80.jpg \
   -dJPEGQ=80      \
   -r200x200       \
   -g1653x2339     \
   foo.pdf

ou até mesmo

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_default_a4.jpg \
   -sPAPERSIZE=a4 \
   foo.pdf

(que fornece uma resolução de 72dpi, geralmente boa o suficiente para a maioria das telas e para a maioria das aplicações web).

    
por 06.08.2010 / 01:06
8

BTW, uma das razões pelas quais o ImageMagick é muito mais lento é que ele chama o Ghostscript duas vezes. Não converte PDF = > PNG de uma só vez, mas usa duas etapas diferentes:

  • usa primeiro o Ghostscript para PDF => PostScript conversion;
  • ele usa o Ghostscript para a conversão PostScript => PNG .

Você pode aprender sobre as configurações detalhadas de "delegados" do ImageMagick (os programas externos que o ImageMagick usa, como o Ghostscript) digitando

convert -list delegate

(No meu sistema, há uma lista de 32 comandos diferentes.) Agora, para ver quais comandos são usados para converter em PNG, use isto:

convert -list delegate | grep -i png

Ok, isso foi para o Linux. Se você estiver no Windows, tente isto:

convert -list delegate | findstr /i png

Você descobrirá que o IM produz PNG somente a partir da entrada PS ou EPS. Então, como o IM obtém (E) PS do seu PDF? Fácil:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF

Ah! Ele usa o Ghostscript para fazer um PDF = > PS conversão, em seguida, usa o Ghostscript novamente para fazer um PS = > Conversão de PNG. Funciona, mas não é a maneira mais eficiente se você sabe que o Ghostscript pode fazer PDF = > PNG em um vai. E mais rápido. E com muito melhor qualidade.

Sobre a manipulação de conversões de PDF para imagens por meio do delegado do Ghostscript, você deve saber duas coisas acima de tudo:

  1. Por padrão, se você não fornecer um parâmetro extra, o Ghostscript exibirá imagens com uma resolução de 72dpi. É por isso que às vezes as pessoas aqui sugerem para adicionar -density 600 como um parâmetro convert , que diz ao Ghostscript para usar uma resolução de 600 dpi para sua saída de imagem.
  2. O desvio da mensagem instantânea para chamar Ghostscript duas vezes para converter primeiro PDF => PS e, em seguida, PS => PNG é um verdadeiro erro. Porque você nunca ganha e mantém a qualidade no primeiro passo, mas muitas vezes perde um pouco. Razões:
    • O PDF pode manipular transparências, o que o PostScript não consegue.
    • O PDF pode incorporar fontes TrueType, o que o PostScript não pode. etc.pp.
      (Conversão na direção oposta, PS => PDF , portanto não é tão crítica ...)

É por isso que eu sugeri que você convertesse seus PDFs de uma só vez para PNG (ou JPEG) usando o Ghostscript diretamente. E use a versão mais recente 8.71 (que em breve será lançada: 9.00) do Ghostscript ...

    
por 06.09.2010 / 18:14
4

Na minha experiência, o MuPDF é muito mais rápido que o Ghostscript. É um projeto muito mais recente sem grande parte do lixo em gs. Tente se encaixa para o seu usecase!

mudraw -w 1024 -h 768 -r 200 -c rgb -o bar%d.png foo.pdf

Se você tem uma distribuição linux mais antiga e instalou mupdf-tools a partir do repositório, mudraw ainda pode ser chamado de pdfdraw

Você então tem que converter o png para jpeg usando por exemplo imagemagick. Mas ainda será mais rápido que o Ghostscript.

    
por 16.08.2016 / 14:24
3

O programa pdftoppm do pacote poppler também é capaz de criar JPEGs e, por me é cerca de duas vezes mais rápido do que usar gs , conforme descrito acima:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg
    
por 14.06.2013 / 19:04