Может ли кто-нибудь помочь мне здесь. Я пытаюсь сделать коллекцию обложек DVD. У меня есть несколько изображений для разных обложек и несколько изображений для разных букв позвоночника. Каждая обложка .jpg имеет то же имя, что и соответствующий ей Spine Jpg. Мне просто нужно знать, как объединить эти изображения в пакетный процесс, так как у меня их 900, и объединение их по одному займет много времени. Есть ли программа, которая может сделать это с минимумом суеты? Я в основном использую Photoshop, но я не нашел способ сделать это.
1 ответ
Лучше всего будет использовать ImageMagick (это кроссплатформенная программа для работы с изображениями из командной строки) и некоторые пользовательские сценарии. Тем не менее, я не уверен, будет ли это решение "минимальной суеты" для вас или нет
Если вы заинтересованы в использовании ImageMagick, вы можете получить текущие версии на странице загрузок, хотя, возможно, вам придется немного прокрутить страницу, чтобы найти что-то подходящее для вас. Вы не упомянули, какую операционную систему вы используете, но специально для Windows сборка Q16-x64
по умолчанию, скорее всего, подойдет.
Использование ImageMagick
После установки ImageMagick для объединения изображений вы можете использовать утилиту convert
.
Предполагая, что у нас есть набор изображений, помеченных, например, как image_front.jpg, image_back.jpg и image_spine.jpg, и что они имеют одинаковую высоту, мы можем использовать команду convert
с опцией +append, чтобы сшить их по горизонтали:
convert image_front.jpg image_spine.jpg image_back.jpg +append image_combined.jpg
В этом случае image_combined.jpg - это наша последняя обложка, состоящая из данных изображений по порядку.
Windows Convert
Обратите внимание, что в Windows есть встроенная команда convert
которая не имеет ничего общего с ImageMagick. Это может вызвать путаницу или другие незначительные проблемы, если вы используете Windows и не проявляете осторожности.
В любом случае, если вы хотите использовать утилиту convert
ImageMagick в Windows, как показано выше, вам необходимо зарегистрировать папку установки ImageMagick (например, C:\path\to\imagemagick
) в переменной среды Windows Path
.
В противном случае вам нужно будет указывать полный путь для convert
каждом вызове (например, C:\path\to\imagemagick\convert.exe
).
автоматизация
Поскольку ImageMagick работает через командную строку, он поддается автоматизации с помощью сценариев. Хотя есть разные способы решения этой проблемы, я привел простой пример с использованием пакета Windows ниже.
Для согласованности я буду использовать схему именования, аналогичную примеру convert
из предыдущего. Я также предполагаю, что все конвертируемые файлы появляются в одном и том же начальном каталоге.
Пример пакетного раствора
В этом примере первым шагом является создание списка "базовых" имен файлов (в пакетном сценарии будут добавлены "расширения", такие как _front.jpg
, _spine.jpg
и _back.jpg
).
Этот список можно назвать как угодно, но я буду ссылаться на него как files.txt. Если предположить, что изображениями обложки являются, например, image_01_front.jpg
, image_01_spine.jpg
, image_01_back.jpg
и т.д., И что существует четыре группы изображений, то файл files.txt будет иметь следующее содержимое:
image_01
image_02
image_03
image_04
Обратите внимание, что в этом списке не должно быть дубликатов. Аналогично, не должно быть пустых строк. Предполагая, что эти требования соблюдены, этот список можно затем использовать в качестве входных данных для следующего примерного пакетного файла:
@echo off
@rem Create some folders to hold our images after processing.
if not exist processed mkdir processed
if not exist combined mkdir combined
@rem We use %%~A below to access the strings returned from our list.
@rem %cd% is a special variable representing the current directory.
@rem For each item in our list...
for /f "usebackq delims=" %%A in ("%cd%\files.txt") do (
@rem Use ImageMagick to combine our images.
@rem We are concatenating strings here (%%~A and e.g. "_front.jpg").
@rem This is the same as writing ex. "image_01_front.jpg".
convert %%~A_front.jpg %%~A_spine.jpg %%~A_back.jpg +append %%~A_combined.jpg
@rem Sort our images to the appropriate local folders after conversion.
move %%~A_front.jpg .\processed
move %%~A_spine.jpg .\processed
move %%~A_back.jpg .\processed
move %%~A_combined.jpg .\combined
)
echo Script completed.
pause
Этот скрипт может быть сохранен как, например, merge.bat. Предполагая, что этот пакетный файл находится в том же каталоге, что и файл files.txt (вместе с изображениями, перечисленными в этом файле), можно дважды щелкнуть по merge.bat и просто обработать все изображения в списке (при условии, что ничего не происходит криво).
Примечания сценария
Данный скрипт является просто примером, очевидно. Это может потребовать некоторых настроек для вашей конкретной ситуации / желаний.
В настоящее время примерный пакетный файл не содержит подкаталогов.
("%cd%\files.txt")
можно заменить, например, на("C:\path\to\files.txt")
.%%~A
заслуживает особого внимания, так как он в конечном итоге представляет каждую строку (в свою очередь), указанную в файле files.txt .Хотя точные имена файлов менее важны (команда
convert/+append
может принимать практически любое произвольное имя), для автоматизации они должны иметь согласованную структуру. Если вам нужно изменить большое количество имен файлов одновременно в Windows, вас может заинтересовать утилита массового переименования .В то время как пакет является сносным, другой язык, который я мог бы предложить, является Python . Он кроссплатформенный и, хотя для обработки файлов может потребоваться больше кода, он может быть предпочтительнее пакетного во многих других отношениях.
Генерация списков файлов
Реальные списки файлов, вероятно, будет немного сложнее создать, чем четыре основных элемента. Хотя он не будет производить именно то, что вам нужно для приведенного выше примера, если вы работаете в Windows, вы можете создать список только имен файлов и расширений с помощью dir /b > files.txt
в командной строке, открытой в том же каталоге, что и ваши файлы изображений. В большинстве случаев это даст вам как минимум 50% пути.
Аналогично, сторонние текстовые редакторы, такие как Notepad++ (Windows), могут иметь полезные функции. В случае с Notepad++ он поддерживает регулярные выражения, а также обычную замену текста. Таким образом сделать, например:
image_01_back.jpg
image_01_front.jpg
image_01_spine.jpg
image_02_back.jpg
image_02_front.jpg
image_02_spine.jpg
image_03_back.jpg
image_03_front.jpg
image_03_spine.jpg
image_04_back.jpg
image_04_front.jpg
image_04_spine.jpg
merge.bat
randomfile.extra
files.txt
в:
image_01
image_02
image_03
image_04
Для Notepad++ вы могли бы:
Вручную удалите merge.bat, randomfile.extra и files.txt.
Используйте Поиск → Заменить ... ( Ctrl + H ), чтобы исключить расширения (.eg
.jpg
) с помощью пустых замен, а также, скажем,_front
чтобы задать набор базовых имен для пакетного сценария:image_01_back →image_01 image_01_spine image_02_back →image_02 image_02_spine image_03_back →image_03 image_03_spine image_04_back →image_04 image_04_spine
Затем вы можете переключиться в
Search Mode: Regular expression
чтобы исключить строки, содержащие _spine:
На скриншоте выше .+spine$
Spine $ выделяет все строки с _spine
в конце. Вы также можете удалить все строки, содержащие _back
с .+back$
, оставив что-то вроде следующего:
image_01
image_02
image_03
image_04
Эти пустые строки можно затем удалить с помощью Правка → Операции со строками → Удалить пустые строки, оставив наш окончательный список для файла files.txt:
image_01 image_02 image_03 image_04
Это может показаться неэффективным для четырех строк, но, поскольку вы говорите, что у вас более 900 наименований, возможно, стоит рассмотреть некоторые варианты этих шагов.