Утилита ImageMagick `convert` занимает * слишком много * памяти при вводе PDF

11

Я часто использую ImageMagick convertдля преобразования * -> PNG, но когда PDF имеет более 50 страниц - convertсъедает более 3 Gib (!!!) памяти. Я думаю, это сначала загружает все.

Это недопустимо. Стоит читать PDF постранично, зачем, черт возьми, все сразу!

Может быть, есть способ как-то его настроить? Или есть хорошие альтернативы?

kolypto
источник

Ответы:

10

Решено с помощью следующего:

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
источник
9

Вы пробовали кеш?

Со страницы руководства

порог кеширования

      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
источник
1
Это вариант для convert? У меня есть только «предел ресурса кэша пикселей значения типа -limit». Плюс ваша цитата говорит "80Mb по умолчанию", но мой
конверт
80Mb может быть по умолчанию, если вы просто добавляете -cache без значения, следующего за ним.
Шикору
1
Хм, у моего IMagick есть только "-limit memory 64", чтобы ограничить его память до 64MB. Это работает, спасибо в любом случае! :)
Колыпто
2
Найдено: "-cache <порог> (эта опция была заменена опцией -limit)"
kolypto
1
@kolypto В моей интерпретации веб-сайты ImageMagick говорят, что единицей по умолчанию является байты: «Значение для файла указывается в количестве файлов. Другие ограничения в байтах. Определите аргументы для ограничений памяти, карты, области и дискового ресурса с помощью SI префиксы (.eg 100MB). " imagemagick.org/script/command-line-options.php#limit
thomasa88
8

Я использую следующее:

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

Мой основной диск имеет ограниченное пространство, поэтому я добавляю переменную

env MAGICK_TMPDIR=/host/Temp convert -limit memory 64 -limit map 128 original.djvu newfile.pdf
dufte
источник
Использование -limitказалось, чтобы подтолкнуть использование диска, когда я использовал его Кажется странным, что imagemagick использует столько памяти и дискового пространства, сколько есть ... так как, конечно, можно рендерить только одну страницу за раз ... но я предполагаю, что может иметь место некоторый параллелизм.
Att Righ