Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: imagemagick:montage больше 1к картинок  (Прочитано 585 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6691
  • 20% Cooler
    • Просмотр профиля
imagemagick:montage больше 1к картинок
« : 02 Ноября 2018, 23:48:17 »
Подскажите, пожалуйста:
Есть >1000 картинок, нужно с помощью montage (imagemagick) собрать их в изображения размером 3х7.

Понятно, что нельзя просто в папке запустить
montage ./*.jpg -tile 3x7 out.jpg
память сразу кончится, и OOM-киллер прибьёт это дело.

Набросал скриптик
#!/bin/bash
j=0
for i in ./*.jpg ; do
j=$(( j+1 ))
k="$i $k"
if (( j == 21)) ; then
montage $k -tile 3x7 -geometry +0+0 ../$(date +%H%M%S%4N).jpg
j=0
k=''
fi
done
Работает) Но, для некратного 21 числу файлов - не выполняет склейку на "остатке". Что-то никак не соображу, как cделать так, чтоб и "остаток" файлов тоже ушел в montage. Любые идеи приветствуются)  :)

PS пробовал без скрипта указывать -limit (опция IM) - без толку. Либо OOM всё-таки убивает, либо просто 100% CPU без результата.

PPS можно, в принципе, дополнить но кратного 21 пустыми jpg, но кажется как-то неправильно. 

Пользователь добавил сообщение 03 Ноября 2018, 00:13:28:
А ларчик просто открывался...
#!/bin/bash
j=0
for i in ./*.jpg ; do
j=$(( j+1 ))
k="$i $k"
if (( j == 21)) ; then
montage $k -tile 3x7 -geometry +0+0 ../$(date +%H%M%S%4N).jpg
j=0
k=''
fi
done
if ((j != 0 )) && (( j < 21 )) ;  then
montage $k -tile 3x7 -geometry +0+0 ../$(date +%H%M%S%4N).jpg
fi

Тему не закрываю, вдруг найдутся решения получше...
« Последнее редактирование: 03 Ноября 2018, 05:23:33 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.03 секунд. Запросов: 26.