ImageMagick пакетный монтаж всех изображений в подпапках - PullRequest
2 голосов
/ 16 апреля 2019

У меня есть папка, содержащая 4 подпапки, и каждая подпапка содержит 4 изображения (всего 16 изображений). Я хочу объединить эти 16 изображений в 1 изображение.

Пример структуры:

0/0.png
0/1.png
...
1/0.png
1/1.png
...
3/3.png

Вот как изображения объединяются в одно изображение:

image

Каждый столбец представляет подпапку.

У меня +30 таких папок, и поэтому я хочу создать скрипт, а не делать это вручную в Photoshop.

Я скачал ImageMagick для Windows и попытался создать пакетный скрипт, который мог бы запускаться.

Я пробовал это:

cd %cd%
for /r /d %%a in (*.png) do montage -tile 5x4 "result.png"

Это не работает (нет изображения или ошибки в CMD). Обратите внимание, что я совершенно новичок как в ImageMagick, так и в создании файлов .bat в Windows.

Итак, как можно изменить мой сценарий, чтобы он проходил через все подпапки и создавал / преобразовывал один монтаж / плитку из всех изображений в подпапках?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Я не знаю синтаксис сценариев Windows. Но если вы перебираете каждый каталог из 30 ваших каталогов и запускаете следующую команду ImageMagick из Марка Сетчелла, преобразованную в косые черты Windows, это должно сработать.

magick.exe ( 0\*.png -append ) ( 1\*.png -append ) ( 2\*.png -append ) ( 3\*.png -append ) +append result.png


Поскольку я не знаю сценариев Windows .bat, вполне возможно, что ответ от Герхарда Барнарда может сделать именно это.

0 голосов
/ 16 апреля 2019

Ваш пример проходит по всем изображениям, но вы делаете это только в текущих dir, а не в подкаталогах. Команда также нигде не использует метавариабельную переменную %%a, и, если она использовалась, она выполняет функцию do для каждого файла отдельно.

Вы можете просто просмотреть изображения, используя dir, получить каждое и добавить их, используя set /p в пакете. поэтому независимо от того, сколько у вас изображений, они должны проходить через них ... Здесь я просто сохраняю результат в файле tmp, чтобы использовать его в другом цикле, но есть много способов.

@echo off
set "myt=%temp%out.tmp"
for /f %%i in ('dir /b /a-d /S *.png') do echo| set /p = ("%%~fi" -append)>>"%myt%"
for /f "delims=" %%b in (%myt%) do magick.exe %%b +append result.png
del /Q "%myt%">nul

ПРИМЕЧАНИЕ Я не слишком разбираюсь в magick, поэтому не уверен, что двойные кавычки вызовут проблемы, однако я сомневаюсь, что пути с пробелами должны вызывать проблемы.

...