Conversão rápida de pdf para jpg no Linux desejado [fechado]


11

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

O comando que eu 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?


Quanto tempo, quanta memória?
Zoredache

Respostas:


18

Usar o Ghostscript diretamente (em vez de usar o convertcomando ImageMagick , que chama Ghostscript indiretamente) é realmente mais rápido. E oferece mais controle sobre os parâmetros de conversão. Experimentar

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 ainda será lento para você e criará arquivos maiores que o esperado. Para tamanhos de arquivos menores e execução mais rápida, tente isso (o que provavelmente se aproxima da qualidade de saída da sua convertlinha de comando):

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

ou mesmo

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

(com resolução de 72 dpi, geralmente boa o suficiente para a maioria das telas e para a maioria dos aplicativos da web).


1
Você está certo. Eu realmente não achei que o Imagemagick seria o gargalo. Mas eu provavelmente deveria ter tentado. Obrigado também pelos ótimos exemplos!
mat3001

10

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

  • primeiro usa o Ghostscript para PDF => PostScriptconversão;
  • ele usa o Ghostscript para PostScript => PNGconversão.

Você pode aprender sobre as configurações detalhadas "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 o seguinte:

convert -list delegate | grep -i png

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

convert -list delegate | findstr /i png

Você descobrirá que o MI produz PNG apenas 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 uma conversão em PDF => PS e, em seguida, usa o Ghostscript novamente para fazer uma conversão em PS => PNG. Funciona, mas não é a maneira mais eficiente se você souber que o Ghostscript pode fazer PDF => PNG de uma só vez. E mais rápido. E com qualidade muito melhor.

Sobre o manuseio de mensagens instantâneas pela conversão de PDF em imagens via delegado Ghostscript, você deve saber duas coisas antes de tudo:

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

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


6

O programa pdftoppmdo pacote poppler também é capaz de criar JPEGs e, para mim, é duas vezes mais rápido do gsque o descrito acima:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg

Que ótima sugestão. Corrigido um erro grave que trava o aplicativo quando mudei para pdftoppm graças a esta resposta - nunca soube disso antes!
Danmactough 29/08/2015

Você, senhor, merece uma medalha por isso :) #
9997 Todorovic Milan

2
não é mais rápido do que gs
Ghilas Belhadj

6

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. Experimente se ele se encaixa no seu caso!

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

Se você possui uma distribuição Linux mais antiga e instalou o mupdf-tools a partir do repositório, mudrawainda poderá ser chamadopdfdraw

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


2
No meu teste, a conversão de PDF para PNG do MuPDF é cerca de 5-6 vezes mais rápida que o Ghostscript. Obrigado pela solução!
Dmitry Akinin

1
Isso é incrivelmente útil. Leva alguns segundos para que o Ghostscript leve alguns minutos, além da linha de comando ser fácil! Muito obrigado por trazer isso à minha atenção!
#
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.