dmmcash
Подскажите пожалуйста. Может есть готовое решение для пакетной обработки фоток на сервере? Мне нужно сделать ресайз с понижением размера до 1600 по любой из сторон в конкретной директории с учетом всех поддиректорий (их под тысячу). Понижение качества у mogrify вроде по умолчанию есть небольшое.
Сам нашел вот такое:
!/bin/bash
for i in *.jpg;
do
echo "Working on $i ..."
mogrify -resize 1600×1600\> $i $i; done
echo " "
echo "... Done!"
echo " "
exit 0
Только в этом скрипте поддиректории не учитываются я так понимаю. Ну и главное - запускать обработку нужно периодически на небольшие кусочки из всего объема фоток. Иначе у сервака коленки подогнутся надолго.
Я точно не смогу такое чудо придумать. Но ведь задача не очень редкая, наверняка есть готовые решения. Найти сам не смог.
Спасибо
xjam
Вместо
for i in *.jpg;
можно написать
Код:
for i in `find /DIR/|grep '\.jpg$'`;
DIR нужно заменять на свою директорию картиок.
И оно начнёт понимать директории и вложенные в них директории тоже
johndoe2
- imagemagick можно "попросить" не есть все доступные ресурсы.
Цитата:
Environment Variables
...
MAGICK_THREAD_LIMIT Set maximum parallel threads. Many ImageMagick algorithms run in parallel on multi-processor systems. Use this environment variable to set the maximum number of threads that are permitted to run in parallel.
MAGICK_THROTTLE_LIMIT Periodically yield the CPU for at least the time specified in milliseconds.
- mogrify не нужно указывать "выходной" файл. Он просто перезаписывает входной файл.
Например так можно обработать все картинки внутри /home/pics с ограничением в один поток
Код:
#!/usr/bin/env bash
export MAGICK_THREAD_LIMIT=1
find /home/pics -iname \*.jpg | while read fn; do
echo $fn
mogrify -resize 1600x1600\> $fn
done
echo done