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

Может ли кто-нибудь помочь мне здесь. Я пытаюсь сделать коллекцию обложек 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

Обратите внимание, что Windows имеет встроенный convert команда, которая не имеет ничего общего с ImageMagick. Это может вызвать некоторую путаницу или другие незначительные проблемы, если вы используете Windows и неосторожны.

Независимо от того, если вы хотите использовать ImageMagick convert Утилита для Windows, как показано выше, вам нужно зарегистрировать папку установки ImageMagick (например, C:\path\to\imagemagick) в твоей винде 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++ вы могли бы:

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

  2. Используйте ПоискЗаменить... (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:

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

    image_01

    image_02

    image_03

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

    image_01
    image_02
    image_03
    image_04
    

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

Другие вопросы по тегам