Conversion rapide de pdf en jpg sous Linux voulue [fermé]

11

J'utilise actuellement ImageMagick pour convertir des PDF en images raster JPEG. Il est douloureusement lent et utilise beaucoup de mémoire.

La commande que j'ai utilisée était:

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

Je suppose que c'est lent car il utilise Ghostscript. Mais il doit y avoir un moyen plus rapide de le faire sur une box Linux.

Quelqu'un a-t-il trouvé une meilleure solution?

mat3001
la source
Combien de temps, combien de mémoire?
Zoredache

Réponses:

18

Utiliser Ghostscript directement (au lieu d'utiliser la convertcommande ImageMagick , qui appelle Ghostscript indirectement) est en effet plus rapide. Et cela vous donne plus de contrôle sur les paramètres de conversion. Essayer

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

  • -o: détermine le chemin de sortie + le nom du fichier (et économise l'utilisation de -dBATCH -dNOPAUSE)
  • -dJPEGQ: définit la qualité JPEG à 95%
  • -r: définit la résolution à 600 dpi
  • -g: définit la taille de l'image à 4960x7016px
  • -sDEVICE: définit la sortie au format JPEG

Cette commande sera probablement encore trop lente pour vous et créera des fichiers plus gros que prévu. Pour des fichiers plus petits et une exécution plus rapide, essayez ceci (qui se rapproche probablement de la qualité de sortie de votre convertligne de commande):

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

ou même

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

(qui donne une résolution de 72 dpi, souvent assez bonne pour la plupart des écrans et pour la plupart des applications Web).

Kurt Pfeifle
la source
1
Vous avez raison. Je ne pensais vraiment pas qu'Imagemagick serait le goulot d'étranglement. Mais j'aurais probablement dû essayer. Merci aussi pour les bons exemples!
mat3001
10

BTW, l'une des raisons pour lesquelles ImageMagick est tellement plus lent, c'est qu'il appelle Ghostscript deux fois. Il ne convertit pas PDF => PNG en une seule fois, mais utilise 2 étapes différentes:

  • il utilise d'abord Ghostscript pour la PDF => PostScriptconversion;
  • il utilise ensuite Ghostscript pour la PostScript => PNGconversion.

Vous pouvez en savoir plus sur les paramètres détaillés des "délégués" d'ImageMagick (les programmes externes utilisés par ImageMagick, tels que Ghostscript) en tapant

convert -list delegate

(Sur mon système, c'est une liste de 32 commandes différentes.) Maintenant, pour voir quelles commandes sont utilisées pour convertir en PNG, utilisez ceci:

convert -list delegate | grep -i png

Ok, c'était pour Linux. Si vous êtes sous Windows, essayez ceci:

convert -list delegate | findstr /i png

Vous découvrirez que la messagerie instantanée ne produit PNG qu'à partir de l'entrée PS ou EPS. Alors, comment IM obtient-il (E) PS de votre PDF? Facile:

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

Ah! Il utilise Ghostscript pour effectuer une conversion PDF => PS, puis utilise à nouveau Ghostscript pour effectuer une conversion PS => PNG. Fonctionne, mais n'est pas le moyen le plus efficace si vous savez que Ghostscript peut faire PDF => PNG en une seule fois. Et plus vite. Et de bien meilleure qualité.

À propos de la gestion par IM de la conversion PDF en images via le délégué Ghostscript, vous devez d'abord savoir deux choses:

  1. Par défaut, si vous ne donnez pas de paramètre supplémentaire, Ghostscript produira des images avec une résolution de 72 dpi. C'est pourquoi parfois les gens suggèrent ici d'ajouter -density 600un convertparamètre qui indique à Ghostscript d'utiliser une résolution de 600 dpi pour sa sortie d'image.
  2. Le détour de la messagerie instantanée pour appeler Ghostscript deux fois pour convertir d'abord PDF => PS, puis PS => PNGest une véritable erreur. Parce que vous ne gagnez jamais et que vous conservez durablement la qualité dans la première étape, mais que vous en perdez très souvent. Les raisons:
    • Le PDF peut gérer les transparents, ce que PostScript ne peut pas.
    • Le PDF peut incorporer des polices TrueType, ce que PostScript ne peut pas. etc.pp.
      (La conversion en sens inverse,, PS => PDFn'est donc pas critique ...)

C'est pourquoi je vous avais suggéré de convertir vos PDF en une seule fois en PNG (ou JPEG) en utilisant directement Ghostscript. Et utilisez la version la plus récente 8.71 (qui sortira bientôt: 9.00) de Ghostscript ...

Kurt Pfeifle
la source
6

Le programme pdftoppmdu package poppler est également capable de créer des fichiers JPEG, et pour moi, il est environ deux fois plus rapide que l'utilisation gsdécrite ci-dessus:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg
user177876
la source
Quelle excellente suggestion. Je viens de corriger un bug majeur qui faisait planter mon application en passant à pdftoppm grâce à cette réponse - je n'en ai jamais eu connaissance auparavant!
danmactough
Vous méritez une médaille pour cela :)
Milan Todorovic
2
ce n'est pas plus rapide que gs
Ghilas BELHADJ
6

D'après mon expérience, MuPDF est beaucoup plus rapide que Ghostscript. Il s'agit d'un projet beaucoup plus récent sans une grande partie de la cruauté en gs. Essayez si cela convient à votre cas d'utilisation!

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

Si vous avez une distribution Linux plus ancienne et des outils mupdf installés à partir du référentiel, il mudrawpourrait toujours être appelépdfdraw

Vous devez ensuite convertir le png en jpeg en utilisant par exemple imagemagick. Mais ce sera toujours plus rapide que Ghostscript.

Josef dit réintégrer Monica
la source
2
Dans mon test, la conversion PDF en PNG de MuPDF est environ 5-6 fois plus rapide que Ghostscript. Merci pour la solution!
Dmitry Akinin
1
C'est incroyablement utile. Cela prend quelques secondes où Ghostscript prendrait des minutes, plus la ligne de commande est un jeu d'enfant! Merci beaucoup d'avoir porté cela à mon attention!
likeitlikeit