Conversión rápida de pdf a jpg en Linux quería [cerrado]

11

Actualmente estoy usando ImageMagick para convertir archivos PDF a imágenes ráster JPEG. Es dolorosamente lento y consume mucha memoria.

El comando que usé fue:

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

Supongo que es lento porque usa Ghostscript. Pero debe haber una forma más rápida de hacerlo en una caja de Linux.

¿Alguien ha encontrado una mejor solución?

mat3001
fuente
¿Cuánto tiempo, cuánta memoria?
Zoredache

Respuestas:

18

Usar Ghostscript directamente (en lugar de usar el convertcomando ImageMagick , que llama a Ghostscript indirectamente) es realmente más rápido. Y le da más control sobre los parámetros de conversión. Tratar

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

dónde

  • -o: determina la ruta de salida + nombre de archivo (y guarda el uso de -dBATCH -dNOPAUSE)
  • -dJPEGQ: establece la calidad JPEG al 95%
  • -r: establece la resolución a 600 ppp
  • -g: establece el tamaño de la imagen en 4960x7016px
  • -sDEVICE: establece la salida como JPEG

Es probable que este comando aún sea lento para usted y cree archivos más grandes de lo esperado. Para tamaños de archivo más pequeños y una ejecución más rápida, intente esto (que probablemente se acerca a la calidad de salida de su convertlínea de comandos):

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

o incluso

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

(que proporciona una resolución de 72 ppp, a menudo lo suficientemente buena para la mayoría de las pantallas y para la mayoría de las aplicaciones web).

Kurt Pfeifle
fuente
1
Tienes razón. Realmente no creía que Imagemagick fuera el cuello de botella. Pero probablemente debería haberlo intentado. ¡Gracias también por los excelentes ejemplos!
mat3001
10

Por cierto, una de las razones por las que ImageMagick es mucho más lento es que llama a Ghostscript dos veces. No convierte PDF => PNG de una vez, pero utiliza 2 pasos diferentes:

  • primero usa Ghostscript para la PDF => PostScriptconversión;
  • luego usa Ghostscript para la PostScript => PNGconversión.

Puede obtener información sobre la configuración detallada de los "delegados" de ImageMagick (los programas externos que utiliza ImageMagick, como Ghostscript) escribiendo

convert -list delegate

(En mi sistema, esa es una lista de 32 comandos diferentes). Ahora para ver qué comandos se usan para convertir a PNG, use esto:

convert -list delegate | grep -i png

Ok, esto fue para Linux. Si está en Windows, intente esto:

convert -list delegate | findstr /i png

Descubrirá que la mensajería instantánea produce PNG solo a partir de la entrada PS o EPS. Entonces, ¿cómo obtiene IM (E) PS de su PDF? Fácil:

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

Ah! Utiliza Ghostscript para hacer una conversión PDF => PS, luego usa Ghostscript nuevamente para hacer una conversión PS => PNG. Funciona, pero no es la forma más eficiente si sabe que Ghostscript puede hacer PDF => PNG de una vez. Y mas rapido. Y de mucha mejor calidad.

Sobre el manejo de IM de la conversión de PDF a imágenes a través del delegado de Ghostscript, primero debe saber dos cosas:

  1. De manera predeterminada, si no proporciona un parámetro adicional, Ghostscript generará imágenes con una resolución de 72 ppp. Es por eso que a veces las personas aquí sugieren agregar -density 600como un convertparámetro que le dice a Ghostscript que use una resolución de 600 ppp para su salida de imagen.
  2. El desvío de IM para llamar a Ghostscript dos veces para convertir primero PDF => PSy luego PS => PNGes un verdadero error. Porque nunca ganas y difícilmente mantienes la calidad en el primer paso, pero a menudo pierdes algo. Razones:
    • PDF puede manejar transparencias, que PostScript no puede.
    • PDF puede incrustar fuentes TrueType, que PostScript no puede. etc.pp.
      (La conversión en la dirección opuesta PS => PDF, por lo tanto, no es tan crítica ...)

Es por eso que le sugerí que convierta sus PDF de una vez a PNG (o JPEG) usando Ghostscript directamente. Y use la versión más reciente 8.71 (próximamente lanzada: 9.00) de Ghostscript ...

Kurt Pfeifle
fuente
6

El programa pdftoppmdel paquete poppler también puede crear archivos JPEG, y para mí es aproximadamente el doble de rápido que el uso gsdescrito anteriormente:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg
usuario177876
fuente
Que gran sugerencia. Solo solucioné un error importante que bloqueaba la aplicación. Mi cambio a pdftoppm gracias a esta respuesta, ¡nunca antes lo había sabido!
danmactough
Usted, señor, merece una medalla por esto :)
Milan Todorovic
2
no es más rápido que gs
Ghilas BELHADJ
6

En mi experiencia, MuPDF es mucho más rápido que Ghostscript. Es un proyecto mucho más nuevo sin gran parte del rudo en gs. ¡Pruebe si se ajusta a su caso de uso!

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

Si tiene una distribución anterior de Linux e instaló herramientas mupdf desde el repositorio, mudrawaún podría llamarsepdfdraw

Luego debe convertir el png a jpeg utilizando, por ejemplo, imagemagick. Pero aún será más rápido que Ghostscript.

Josef dice reinstalar a Mónica
fuente
2
En mi prueba, la conversión de PDF a PNG de MuPDF es aproximadamente 5-6 veces más rápida que Ghostscript. ¡Gracias por la solución!
Dmitry Akinin
1
Esto es increíblemente útil. Lleva segundos donde Ghostscript tardaría minutos, ¡además la línea de comando es muy fácil! ¡Muchas gracias por llamar mi atención!
likeitlikeit