Преобразование ImageMagick и низкое ОЗУ

Пожалуйста, рассмотрите следующую команду для пакета imagemagick:

sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg

Теперь test1.jpg - довольно большое изображение (12.5MB), но не неслыханное из размеров, но сервер, с которого я работаю имеет только 1 ГБ памяти (Amazon EC2 t2.micro, если это помогает)

Ошибка не возникает, и все же нет test2.jpg. Я тестировал это с меньшими изображениями, и он отлично работает. Я бы подумал, что 1G, если бы памяти было бы достаточно, чтобы управлять изменением размера, но, возможно, нет?

Каковы мои варианты, мне нужно получить больше памяти, или я что-то пропустил?

[d7 ]

Запрошенный Edits

вывод strace показывает: +++ killed by SIGKILL +++ вместе с довольно команд, которые выглядят нормально (открытие /usr/share/local и чтение длинных строк, которые я принимаю, - это данные изображения).

free дает мне:

         total       used       free     shared    buffers     cached
Mem:       1016292     278348     737944       6412        460      13356
-/+ buffers/cache:     264532     751760
Swap:            0          0          0

Таким образом, похоже, что swap не включен, поэтому я рассмотрю создание swapfile, чтобы узнать, не сортирует ли это мои проблемы.

Файл дает мне:

testprint10Mbv2.jpg: JPEG image data, EXIF standard

Я бы также вставлял полный / путь / в / img, но, к сожалению, он содержит конфиденциальные данные (клиент адреса электронной почты и т. д.)

1
задан 27 January 2016 в 18:24

1 ответ

Проблема в вопросе была решена путем добавления соответствующего свопа. Для полноты позвольте мне рассказать о дополнительных параметрах, которые мы имеем при запуске Image Magick convert в огромных файлах на системах с низкой памятью или при отсутствии подкачки, или обмен был слишком мал.

методы, упомянутые ниже, подробно описаны в руководстве Image Magick:

Действительно массивное обращение с изображениями

Резюме:

Ограничение использования памяти с опцией -limit. При этом Image Magick создаст временный файл для обработки изображений, как только будут превышены заданные пределы памяти. Для этого требуется разрешение записи для Image Magick во временном каталоге файлов. Мы можем указать любой путь, в котором временный файл будет создан в переменной среды MAGICK_TMPDIR. Пример команды может выглядеть примерно так:
    env MAGICK_TMPDIR=/tempdir nice -5 convert -limit memory 32 -limit map 32 largefile.jpg -resize 640x320 smallfile.png
Работа на диске, а не в ОЗУ, значительно замедлит скорость обработки. Работа с «Файлы с дисками с памятью» Создание файлов MPC требует ресурсов, но для преобразования из файлов MPC не требуется столько ресурсов. Поэтому можно учесть, если нам нужно несколько раз преобразовать один и тот же источник с разными параметрами. Затем рабочий процесс может быть схож с этим:
convert huge.jpg huge.mpc
convert huge.mpc -resize 50% big.png
convert huge.mpc -resize 20% small.png
convert huge.mpc -resize 5% thumb.png
Работа с небольшими участками изображения с использованием stream Использование потоковых претензий только для обработки части исходного изображения без необходимости загрузки всего изображения в память.
stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - | convert -depth 8 -size 600x400 rgb:- tile.png
В приведенном выше примере опция -extract принимает значения размера и смещения, определенные геометрией Image Magick. Нам нужно будет придерживаться плитки назад для получения масштабированного изображения в целом. К сожалению, поток не работает для всех форматов изображений, но должен хорошо работать с изображениями JPEG.
4
ответ дан 23 May 2018 в 14:06

Другие вопросы по тегам:

Похожие вопросы: