Das Dienstprogramm `convert` von ImageMagick benötigt bei PDF-Eingabe * zu viel * Speicher

10

Ich verwende oft ImageMagicks convertfür die * -> PNG-Konvertierung, aber wenn PDF mehr als 50 Seiten hat, convertverbraucht es mehr als 3 Gib (!!!) Speicher. Ich denke, es lädt zuerst alles.

Das ist inakzeptabel. Es sollte PDF Seite für Seite lesen, warum zum Teufel alle auf einmal!

Vielleicht gibt es eine Möglichkeit, es irgendwie abzustimmen? Oder irgendwelche guten Alternativen?

kolypto
quelle

Antworten:

10

Gelöst mit folgendem:

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
kolypto
quelle
8

Haben Sie versucht, Cache?

Von der Manpage

-Cache-Schwelle

      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.
Shikoru
quelle
Ist es eine Option für convert? Ich habe nur "-limit Typ Wert Pixel Cache Ressourcenlimit". Außerdem steht in Ihrem Zitat "80 MB ist die Standardeinstellung", aber mein Konverter verbraucht den gesamten Arbeitsspeicher :)
kolypto
80 MB können die Standardeinstellung sein, wenn Sie nur den -cache ohne einen darauf folgenden Wert hinzufügen.
Shikoru
1
Hmm, mein IMagick hat nur "-limit memory 64", um seinen Speicher auf 64MB zu beschränken. Es funktioniert, trotzdem danke! :)
kolypto
1
Gefunden: "-cache <schwelle> (Diese Option wurde durch die Option -limit ersetzt)"
kolypto
@kolypto In meiner Interpretation sagen ImageMagick-Websites, dass die Standardeinheit Bytes ist: "Der Wert für Datei ist in Anzahl der Dateien. Die anderen Grenzwerte sind in Bytes. Definieren Sie Argumente für die Speicher-, Zuordnungs-, Bereichs- und Festplattenressourcenbeschränkungen mit SI Präfixe (.eg 100MB). " imagemagick.org/script/command-line-options.php#limit
thomasa88
8

Ich benutze folgendes:

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

Mein Hauptlaufwerk hat nur begrenzten Speicherplatz, daher stelle ich eine Variable voran

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf
dufte
quelle
Die Verwendung von -limitschien die Festplattennutzung zu beschleunigen, als ich sie verwendete. Es scheint seltsam, dass imagemagick so viel Speicher und Festplatte verwendet wie es ist ... da man sicherlich immer nur eine Seite gleichzeitig rendern kann ... aber ich denke, es könnte eine gewisse Parallelität geben.
Att Righ