Narzędzie do konwersji ImageMagick zajmuje * zbyt dużo * pamięci przy wprowadzaniu plików PDF

11

Często używam ImageMagick convertdo konwersji * -> PNG, ale kiedy PDF ma więcej niż 50 stron - convertzjada więcej niż 3 Gib (!!!) pamięci. Myślę, że najpierw ładuje wszystko.

To niedopuszczalne. Powinien czytać PDF strona po stronie, dlaczego, do diabła, wszystkie z nich jednocześnie!

Może jest jakiś sposób, żeby go jakoś nastroić? Lub jakieś dobre alternatywy?

kolypto
źródło

Odpowiedzi:

10

Rozwiązany za pomocą:

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
źródło
9

Próbowałeś pamięci podręcznej?

Ze strony podręcznika

-próg pamięci podręcznej

      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
źródło
1
Czy to jest opcja convert? Mam tylko „limit limitu zasobów pamięci podręcznej wartości typu limitu typu”. Dodatkowo w cytacie jest napisane, że „80Mb jest domyślnym”, ale moja konwersja zjada całą pamięć RAM :)
kolypto
80Mb może być domyślnym, jeśli dodasz -cache bez wartości po nim.
Shikoru,
1
Hmm, mój IMagick ma tylko „-limit memory 64”, aby ograniczyć swoją pamięć do 64 MB. Działa, w każdym razie dzięki! :)
kolypto,
2
Znaleziono: „-cache <próg> (Ta opcja została zastąpiona opcją -limit)”
kolypto
1
@kolypto W mojej interpretacji strony internetowe ImageMagick mówią, że domyślną jednostką są bajty: „Wartość pliku jest liczbą plików. Pozostałe limity są bajtami. Zdefiniuj argumenty dla pamięci, mapy, obszaru i limitów zasobów dyskowych za pomocą SI prefiksy (.eg 100 MB). ” imagemagick.org/script/command-line-options.php#limit
thomasa88
9

Używam następujących:

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

Mój główny dysk ma ograniczoną przestrzeń, więc przygotowuję zmienną

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf
dufte
źródło
Używanie tego -limitwydawało się zwiększać użycie dysku, gdy go używałem. Wydaje się dziwne, że imagemagick zużywa tyle pamięci i dysku, ile jest ... ponieważ z pewnością można renderować tylko jedną stronę na raz ... ale myślę, że może istnieć pewna równoległość.
Att Righ