2014-12-13 3 views
4

Я хочу использовать ImageMagick convert, чтобы добавить много PNG в один огромный PNG.Make ImageMagick использовать внешний жесткий диск для временных файлов

Когда я делаю это на ПК с большим количеством свободной памяти, он работает, но мне нужно сделать это на моем ноутбуке сейчас, и не хватает места. Я также попытался идентифицировать -limit memory, -limit space и т. Д., Но места недостаточно.

Как установить путь к временным файлам ImageMagick на внешний жесткий диск?

ответ

14

инструменты командной строки ImageMagick признают следующую переменную окружения:

MAGICK_TEMPORARY_PATH 

Это устанавливает путь для хранения временных файлов. Он действителен для всех команд, запущенных во время установки этой переменной.

Альтернативный метод заключается в добавлении -define registry:temporary-path=... к конкретной команде, например:

convert             \ 
    -define registry:temporary-path=/Volumes/external/tmp \ 
    wizard:            \ 
    -resize 250000x250000         \ 
    wizard-250000x250000px.miff 

Это справедливо лишь для той единственной команды. (BTW, wizard: - это встроенный образец изображения в ImageMagick - вы всегда можете использовать его в качестве примера для тестирования команд ImageMagick, если вы играете с ними.)

Чтобы предотвратить большие изображения от использования всей памяти в вашей системе, вы можете принудительно пикселы изображения в памяти отображенный диск с ограничениями ресурсов, путем добавления -limit memory ...:

convert             \ 
    -define registry:temporary-path=/Volumes/external/tmp \ 
    -limit memory 16mb         \ 
    wizard:            \ 
    -resize 250000x250000         \ 
    wizard-250000x250000px.miff 

вы можете даже заставить все пикселей изображения на диск, используя -limit area 0:

convert             \ 
    -define registry:temporary-path=/Volumes/external/tmp \ 
    -limit area 0           \ 
    wizard:            \ 
    -resize 250000x250000         \ 
    wizard-250000x250000px.miff 

Однако имейте в виду: кеширование пикселей на диск на несколько порядков медленнее, чем использование ОЗУ. Коэффициент составляет около 1000! (SSD быстрее, конечно.) Ожидайте секунды, что в противном случае занимает миллисекунды и часы, что обычно занимает минуты ...

Для этих случаев, это довольно удобно -monitor ход обработки:

convert            \ 
    -monitor            \ 
    -limit memory 1GiB         \ 
    -limit map 2GiB          \ 
    -define registry:temporary-path=/Volumes/external/tmp \ 
    wizard:            \ 
    -resize 250000x250000         \ 
    logo-250000x250000px.miff 

В -monitor ... дополнения будут отображаться динамически изменяющийся строки состояния выполнения в терминале говоря что-то вроде

resize image[WIZARD]: 24999 of 43750, 57% complete 

Установка -limit может применяться к area, disk, file, map, memory, thread, или time. file устанавливает количество файлов, area, memory и map устанавливает количество байтов (префиксы SI разрешены), time - в секундах.

Вы можете запросить установку ImageMagick для текущего (или по умолчанию) настройки, запустив

identify -list resource 

я получаю:

File  Area  Memory  Map  Disk Thread Throttle  Time 
------------------------------------------------------------------------------- 
    192 4.295GB  2GiB  4GiB unlimited  1   0 unlimited 

Для командной строки -limit настройки существуют соответствующие переменные окружения тоже. К ним относятся:

MAGICK_AREA_LIMIT 
MAGICK_DISK_LIMIT 
MAGICK_FILE_LIMIT 
MAGICK_MEMORY_LIMIT 
MAGICK_MAP_LIMIT 
MAGICK_THREAD_LIMIT 
MAGICK_TIME_LIMIT 

Эти ограничения ресурсов для области изображения используемого дискового пространства, открытых файлов, куча памяти, карта памяти, количество потоков выполнения, и максимальное время, прошедшее в секундах.

2

Установите переменную окружения MAGICK_TEMPORARY_PATH Е: \

Reference является here.

На Linux/OSX вы

export MAGICK_TEMPORARY_PATH=/volumes/somewherebig 

Я уверен, что вы можете понять эквивалент для Windows, вероятно, как это

SET MAGICK_TEMPORARY_PATH="E:\" 
Смежные вопросы