Cercasi una conversione veloce da pdf a jpg su Linux [chiuso]


11

Attualmente sto usando ImageMagick per convertire i PDF in immagini raster JPEG. È dolorosamente lento e consuma molta memoria.

Il comando che ho usato era:

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

Immagino che sia lento perché usa Ghostscript. Ma ci deve essere un modo più veloce per farlo su un box Linux.

Qualcuno ha trovato una soluzione migliore?


Quanto tempo, quanta memoria?
Zoredache,

Risposte:


18

L'uso diretto di Ghostscript (invece di usare il convertcomando di ImageMagick , che chiama indirettamente Ghostscript) è davvero più veloce. E ti dà un maggiore controllo sui parametri di conversione. Provare

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

dove

  • -o: determina il percorso di output + nome file (e salva l'utilizzo di -dBATCH -dNOPAUSE)
  • -dJPEGQ: imposta la qualità JPEG al 95%
  • -r: imposta la risoluzione su 600 dpi
  • -g: imposta la dimensione dell'immagine su 4960x7016px
  • -sDEVICE: imposta l'output come JPEG

Questo comando probabilmente rallenterà ancora e creerà file più grandi del previsto. Per file di dimensioni ridotte e un'esecuzione più rapida, prova questo (che probabilmente si avvicina alla qualità di output della tua convertlinea di comando):

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

o anche

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

(che offre una risoluzione di 72 dpi, spesso abbastanza buona per la maggior parte degli schermi e per la maggior parte delle applicazioni Web).


1
Hai ragione. Non pensavo davvero che Imagemagick sarebbe stato il collo di bottiglia. Ma probabilmente avrei dovuto provare. Grazie anche per gli ottimi esempi!
mat3001

10

A proposito, uno dei motivi per cui ImageMagick è molto più lento è che chiama Ghostscript due volte. Non converte PDF => PNG in una volta sola, ma utilizza 2 passaggi diversi:

  • utilizza prima Ghostscript per la PDF => PostScriptconversione;
  • utilizza quindi Ghostscript per la PostScript => PNGconversione.

Puoi conoscere le impostazioni dettagliate dei "delegati" di ImageMagick (i programmi esterni utilizzati da ImageMagick, come Ghostscript) digitando

convert -list delegate

(Sul mio sistema c'è un elenco di 32 comandi diversi.) Ora per vedere quali comandi sono usati per convertire in PNG, usa questo:

convert -list delegate | grep -i png

Ok, questo era per Linux. Se sei su Windows, prova questo:

convert -list delegate | findstr /i png

Scoprirai che la messaggistica istantanea produce PNG solo da input PS o EPS. In che modo l'IM ottiene (E) PS dal tuo PDF? Facile:

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

Ah! Utilizza Ghostscript per effettuare una conversione PDF => PS, quindi utilizza nuovamente Ghostscript per effettuare una conversione PS => PNG. Funziona, ma non è il modo più efficiente se sai che Ghostscript può fare PDF => PNG in una volta sola . E più veloce. E di qualità molto migliore.

A proposito della gestione da parte dell'IM della conversione PDF in immagini tramite il delegato Ghostscript dovresti innanzitutto conoscere due cose:

  1. Per impostazione predefinita, se non si fornisce un parametro aggiuntivo, Ghostscript genererà immagini con una risoluzione di 72 dpi. Ecco perché a volte le persone qui suggeriscono di aggiungere -density 600come convertparametro che dice a Ghostscript di usare una risoluzione di 600 dpi per la sua uscita dell'immagine.
  2. La deviazione di IM per chiamare Ghostscript due volte per convertire prima PDF => PSe poi PS => PNGè un vero errore. Perché non vinci mai e Harldy manterrà la qualità nel primo passo, ma molto spesso ne perderai. Motivi:
    • Il PDF può gestire i lucidi, cosa che PostScript non può fare.
    • Il PDF può incorporare caratteri TrueType, cosa che PostScript non può. etc.pp.
      (La conversione nella direzione opposta PS => PDF, quindi non è così critica ....)

Ecco perché ti avevo suggerito di convertire i tuoi PDF in una sola volta in PNG (o JPEG) utilizzando direttamente Ghostscript. E usa la versione più recente 8.71 (che presto uscirà: 9.00) di Ghostscript ...


6

Il programma pdftoppmdal pacchetto poppler è anche in grado di creare JPEG, e per me è circa due volte più veloce dell'uso gscome descritto sopra:

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

Che grande suggerimento. Ho appena risolto un grave bug che causava l'arresto anomalo delle app quando passavo a pdftoppm grazie a questa risposta: non l'ho mai saputo prima!
danmactough,

Signore, meritate una medaglia per questo :)
Milan Todorovic,

2
non è più veloce di gs
Ghilas BELHADJ

6

Nella mia esperienza, MuPDF è molto più veloce di Ghostscript. È un progetto molto più recente senza gran parte dell'innesto in gs. Prova se si adatta al tuo caso d'uso!

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

Se si dispone di una distribuzione Linux precedente e di strumenti mupdf installati dal repository, è mudrawpossibile che venga comunque chiamatopdfdraw

Devi quindi convertire il png in jpeg usando ad esempio imagemagick. Ma sarà ancora più veloce di Ghostscript.


2
Nel mio test la conversione da PDF a PNG di MuPDF è circa 5-6 volte più veloce di Ghostscript. Grazie per la soluzione!
Dmitry Akinin il

1
Questo è incredibilmente utile. Ci vogliono pochi secondi in cui Ghostscript richiederebbe minuti, inoltre la riga di comando è un gioco da ragazzi! Grazie mille per averlo portato alla mia attenzione!
likeitlikeit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.