Пакетное добавление групп изображений с помощью imagemagick
Я хочу использовать ImageMagick's convert
скрипт для добавления двух изображений по горизонтали.
Это легко сделать с convert +append input1.jpg input2.jpg output.jpg
,
У меня есть каталог файлов JPEG, однако. Они выглядят так:
1996-0011-1 BEG Foo Bar Foo Bar.jpg
1996-0011-2 BEG Foo Bar Foo Bar.jpg
2001-0006-1 MEF FooBar.jpg
2001-0006-2 MEF FooBar.jpg
…
Первые четыре цифры - это год, следующие четыре цифры - это порядковый номер. -1
это левая часть, -2
правая часть предполагаемого выходного файла. Оставшаяся часть имени файла представляет собой строку с переменным количеством пробелов.
Как добавить эти группы из двух изображений, используя convert
автоматически? Я полагаю, что это можно сделать, работая с первой, второй,... парой файлов независимо от имени их файла, или сгруппировав эти файлы по имени файла (это будет полезно для пользователей, у которых нет только двух изображений),
Я использую OS X. Спасибо за вашу помощь.
1 ответ
Предполагая две вещи:
- У вас есть доступ к достаточно современной версии GNU bash или совместимой оболочке
- Часть идентификатора всегда
yyyy-nnnn-
сопровождаемый одной или несколькими цифрами (в последовательности), сопровождаемый чем-то еще
тогда вы можете использовать манипуляции со строками bash и расширение подстановочного знака оболочки, чтобы выполнить то, что вы хотите.
Запустите это в каталоге, где файлы 1996-0011-1 BEG Foo Bar Foo Bar.jpg
, 1996-0011-2 BEG Foo Bar Foo Bar.jpg
, 2001-0006-1 MEF FooBar.jpg
а также 2001-0006-2 MEF FooBar.jpg
уже существует.
$ ls -1
1996-0011-1 BEG Foo Bar Foo Bar.jpg
1996-0011-2 BEG Foo Bar Foo Bar.jpg
2001-0006-1 MEF FooBar.jpg
2001-0006-2 MEF FooBar.jpg
$ mkdir old
$ for filename in *.jpg; do
> test -f "$filename" && convert +append ${filename:0:10}* "${filename:0:9} ${filename:12}" && mv ${filename:0:10}* old/; done
$ ls -1
1996-0011 BEG Foo Bar Foo Bar.jpg
2001-0006 MEF FooBar.jpg
old/
$ rm -r old
$
Как это работает, для каждого файла.jpg в каталоге:
- проверить, существует ли файл и является ли он обычным файлом
- если файл существует, то запустите
convert
, передавая первые десять символов имени файла (начиная с позиции символа 0, извлекая 10 символов) в расширение подстановочного знака оболочки, которое будет предоставлено в качестве параметров для преобразования, за которыми следуют первые девять символов имени файла, за которым следует пробел, за которым следует все начиная с 12-го символа (вы можете отрегулировать эту часть, чтобы получить желаемый тип имени выходного файла; обязательно сделайте соответствующую настройку дляmv
призывание) - если
convert
запустился и прошел успешно, переместите все входные файлы в отдельный каталог, чтобы убрать их с дороги
В конце у вас будут выходные файлы в текущем каталоге, и все входные файлы будут перемещены в каталог с именем old
, Обязательно сначала протестируйте приведенный фрагмент на некритических данных.