Как мне объединить 2 изображения с одинаковыми именами файлов в одно в пакетном процессе? Есть ли программа, которая может это сделать?

522
Robin Levingstone

Может ли кто-нибудь помочь мне здесь. Я пытаюсь сделать коллекцию обложек DVD. У меня есть несколько изображений для разных обложек и несколько изображений для разных букв позвоночника. Каждая обложка .jpg имеет то же имя, что и соответствующий ей Spine Jpg. Мне просто нужно знать, как объединить эти изображения в пакетный процесс, так как у меня их 900, и объединение их по одному займет много времени. Есть ли программа, которая может сделать это с минимумом суеты? Я в основном использую Photoshop, но я не нашел способ сделать это.

0
Вы можете сделать это с Imagemagick. Есть много примеров на их форуме. http://www.imagemagick.org/discourse-server/viewforum.php?f=1 SpiderPig 6 лет назад 2

1 ответ на вопрос

0
Anaksunaman

Лучше всего будет использовать 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 ( ex . C:\path\to\imagemagick) В Pathпеременной среды Windows .

В противном случае вам нужно будет указывать полный путь к 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 ++ вы могли бы:

  1. Вручную удалите merge.bat, randomfile.extra и files.txt .

  2. Используйте SearchReplace ... ( 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 
  3. Затем вы можете переключиться Search Mode: Regular expressionна удаление строк, содержащих _spine :

Notepad++ Regular Expression Replacement

На скриншоте выше .+spine$выделены все строки _spineв конце. Вы также можете удалить все строки, содержащие _backс .+back$, оставив что-то вроде следующего:

 image_01  image_02  image_03  image_04 
  1. Эти пустые строки можно затем удалить с помощью ПравкаОперации со строками → Удалить пустые строки, оставив наш окончательный список для файла files.txt :

    image_01 image_02 image_03 image_04 

Это может показаться неэффективным для четырех строк, но, поскольку вы говорите, что у вас более 900 наименований, возможно, стоит рассмотреть некоторые варианты этих шагов.

Похожие вопросы