L'utilità `convert` di ImageMagick occupa * troppa * memoria con input PDF


11

Uso spesso ImageMagick convertper la conversione * -> PNG, ma quando il PDF ha più di 50 pagine - convertconsuma più di 3 Gib (!!!) di memoria. Immagino che prima carichi tutto.

Questo è inaccettabile. Dovrebbe leggere PDF pagina per pagina, perché diamine tutti in una volta!

Forse c'è un modo per sintonizzarlo in qualche modo? O qualche buona alternativa?

Risposte:


10

Risolto con il seguente:

cat <<EOF > /etc/profile.d/ImageMagick.sh
# Set ImageMagick memory limits: it eats too much
export MAGICK_MEMORY_LIMIT=1024 # Use up to *MB of memory before doing mmap
export MAGICK_MAP_LIMIT=1024    # Use up to *MB mmaps before caching to disk
export MAGICK_AREA_LIMIT=4096   # Use up to *MB disk space before failure
export MAGICK_FILES_LIMIT=1024  # Don't open more than *file handles
EOF

9

Hai provato la cache?

Dalla pagina man

soglia di cache

      megabytes of memory available to the pixel cache.

      Image pixels are stored in memory until 80 megabytes of
      memory have been consumed.  Subsequent pixel operations

      are cached on disk.  Operations to memory are  significantly 
      faster but if your computer does not have a sufficient 
      amount of free memory you may  want  to  adjust
      this threshold value.

1
È un'opzione per convert? Ho solo "limite di risorse della cache dei pixel del valore di tipo -limit". Inoltre la tua citazione dice "80 Mb è l'impostazione predefinita", ma il mio convertito mangia tutta la RAM :)
kolypto

80 Mb potrebbe essere il valore predefinito se aggiungi semplicemente -cache senza un valore che lo segue.
Shikoru,

1
Hmm, il mio IMagick ha solo "-limit memory 64" per limitare la sua memoria a 64 MB. Funziona, grazie comunque! :)
Kolypto, il

2
Trovato: "-cache <threshold> (Questa opzione è stata sostituita dall'opzione -limit)"
kolypto il

1
@kolypto Nella mia interpretazione, i siti Web ImageMagick affermano che l'unità predefinita è byte: "Il valore per il file è in numero di file. Gli altri limiti sono in byte. Definire gli argomenti per i limiti di memoria, mappa, area e risorse del disco con SI prefissi (.eg 100 MB). " imagemagick.org/script/command-line-options.php#limit
thomasa88

8

Sto usando il seguente:

convert -limit memory 64 -limit map 128 original.djvu newfile.pdf

La mia unità principale ha uno spazio limitato, quindi antepongo una variabile

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf

L'uso di -limitsembrava spingere l'utilizzo del disco quando l'ho usato. Sembra strano che imagemagick stia utilizzando tutta la memoria e il disco che è ... dal momento che sicuramente si può eseguire il rendering di una sola pagina alla volta ... ma immagino che potrebbe esserci un parallelismo.
Att Righ,
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.