1

Я хочу использовать скрипт convert ImageMagick для добавления двух изображений по горизонтали.

Это легко сделать с помощью 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 ответ1

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 в каталоге:

  1. проверить, существует ли файл и является ли он обычным файлом
  2. если файл существует, запустите команду convert , передав первые десять символов имени файла (начиная с позиции символа 0, извлекая 10 символов) расширению с подстановочными знаками оболочки, которое должно быть предоставлено в качестве параметров для преобразования, после чего следуют первые девять символов файла имя, за которым следует пробел, за которым следуют все, начиная с 12-го символа и далее (вы можете отрегулировать эту часть, чтобы получить желаемый тип имени выходного файла; не забудьте выполнить соответствующую настройку для вызова mv )
  3. если convert прошло успешно, переместите все входные файлы в отдельный каталог, чтобы убрать их с дороги

В конце у вас будут выходные файлы в текущем каталоге, и все входные файлы будут перемещены в каталог с именем old . Обязательно сначала протестируйте приведенный фрагмент на некритических данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .