Wie füge ich zwei Bilder mit denselben Dateinamen in einem Stapelvorgang zusammen? Gibt es ein Programm, das das kann?

743
Robin Levingstone

Kann mir hier jemand helfen? Ich versuche eine Sammlung von DVD-Covers zu erstellen. Ich habe mehrere Bilder für die verschiedenen Umschläge und mehrere Bilder für die verschiedenen Rückenbeschriftungen. Jedes Cover-.jpg hat den gleichen Namen wie das entsprechende Spine-Jpg. Ich muss nur wissen, wie man diese Bilder in einem Batch-Prozess zusammenfügt, da ich 900 davon habe und sie einzeln zusammenzufügen, würde sehr lange dauern. Gibt es ein Programm, das dies mit minimalem Aufwand tun kann? Ich benutze meistens Photoshop, aber ich habe keinen Weg gefunden, dies zu tun.

0
Das kannst du mit Imagemagick machen. Es gibt viele Beispiele in ihrem Forum. http://www.imagemagick.org/discourse-server/viewforum.php?f=1 SpiderPig vor 6 Jahren 2

1 Antwort auf die Frage

0
Anaksunaman

Am besten verwenden Sie ImageMagick (ein plattformübergreifendes Programm zum Bearbeiten von Bildern über die Befehlszeile) und einige benutzerdefinierte Skripts. Ich bin mir jedoch nicht sicher, ob dies eine "minimale Aufregung" -Lösung für Sie wäre oder nicht

Wenn Sie sich für ImageMagick interessieren, können Sie aktuelle Versionen von der Downloadseite herunterladen, obwohl Sie möglicherweise ein wenig scrollen, um etwas Passendes zu finden. Sie haben nicht erwähnt, welches Betriebssystem Sie verwenden, aber für Windows sollte der Standard- Q16-x64Build wahrscheinlich in Ordnung sein.

ImageMagick verwenden

Sobald ImageMagick installiert ist, können Sie zum Kombinieren von Bildern das convertDienstprogramm verwenden.

Angenommen, wir haben eine Reihe von Bildern mit der Beschriftung " image_front.jpg", " image_back.jpg" und " image_spine.jpg" und dass sie alle die gleiche Höhe haben, können wir sie convertmit der Option + append verwenden, um sie horizontal zusammenzufügen:

convert image_front.jpg image_spine.jpg image_back.jpg +append image_combined.jpg 

In diesem Fall ist image_combined.jpg unser letztes Cover, das aus den angegebenen Bildern in Reihenfolge besteht.


Windows konvertieren

Beachten Sie, dass Windows einen integrierten convertBefehl hat, der nichts mit ImageMagick zu tun hat. Dies kann zu Verwirrung oder anderen kleineren Problemen führen, wenn Sie Windows verwenden und nicht aufpassen.

Unabhängig davon, ob Sie die ImageMagick verwenden möchten convertDienstprogramm unter Windows, wie oben gezeigt, müssen Sie Ihren ImageMagick Installationsordner (registrieren ex . C:\path\to\imagemagick) In der Windows - PathUmgebungsvariable.

Andernfalls müssen Sie bei convertjedem Aufruf den vollständigen Pfad angeben (z. B. C:\path\to\imagemagick\convert.exe ).


Automatisierung

Da ImageMagick über die Befehlszeile arbeitet, eignet es sich für die Automatisierung durch Skripting. Obwohl es verschiedene Wege gibt, dies zu bewerkstelligen, habe ich unten ein einfaches Beispiel mit Windows Batch gegeben.

Aus Gründen der Konsistenz werde ich ein Benennungsschema verwenden, das convertdem vorherigen Beispiel ähnelt . Ich gehe auch davon aus, dass alle Dateien, die konvertiert werden sollen, auch im gleichen Ausgangsverzeichnis liegen.

Eine Batch-Beispiellösung

In diesem Beispiel ist der erste Schritt eine Liste der „Basis“ Dateinamen ( „Erweiterungen“ wie zu schaffen _front.jpg, _spine.jpgund _back.jpgwird im Batch - Skript hinzugefügt werden).

Diese Liste kann man beliebig nennen, aber ich werde sie als files.txt bezeichnen . Unter der Annahme, die Cover - Bilder sind zum Beispiel image_01_front.jpg, image_01_spine.jpg, image_01_back.jpgusw., und dass es vier Gruppen von Bildern, files.txt würde folgenden Inhalt hat:

image_01 image_02 image_03 image_04  

Beachten Sie, dass diese Liste keine Duplikate enthalten sollte. Ebenso sollten keine Leerzeilen vorhanden sein. Wenn diese Voraussetzungen erfüllt sind, kann diese Liste dann als Eingabe für die folgende Batchdatei verwendet werden:

@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 

Dieses Skript kann zB als merge.bat gespeichert werden . Angenommen, diese Stapeldatei befindet sich in demselben Verzeichnis wie files.txt (zusammen mit den in dieser Datei aufgelisteten Bildern). Es sollte möglich sein, auf merge.bat zu doppelklicken und einfach alle Bilder in der Liste verarbeiten zu lassen (vorausgesetzt, es geht nichts.) schief).

Skriptnotizen

  • Das angegebene Skript ist offensichtlich nur ein Beispiel. Es kann einige Anpassungen für Ihre spezielle Situation / Wünsche erfordern.

  • Derzeit führt die Batch-Beispieldatei keine Unterverzeichnisse erneut aus.

  • ("%cd%\files.txt")kann ersetzt werden mit z ("C:\path\to\files.txt").

  • %%~Aist äußerst erwähnenswert, da sie jeden String (der Reihe nach) in files.txt darstellt .

  • Während genaue Dateinamen weniger wichtig sind (der convert/+appendBefehl kann fast jeden beliebigen Namen haben), sollten sie für die Automatisierung eine konsistente Struktur haben. Wenn Sie unter Windows eine große Anzahl von Dateinamen gleichzeitig ändern müssen, ist möglicherweise das Hilfsprogramm für die Massenumbenennung von Interesse .

  • Batch ist zwar passierbar, eine andere Sprache, die ich vorschlagen könnte, ist Python . Es ist plattformübergreifend, und obwohl mehr Code für den Umgang mit Dateien benötigt wird, kann es in vielerlei Hinsicht dem Stapel vorgezogen werden.


Dateilisten generieren

Echte Dateilisten sind wahrscheinlich etwas schwieriger zu generieren als vier grundlegende Elemente. Während Sie nicht genau das produzieren, was Sie für das obige Beispiel benötigen, können Sie unter Windows eine Liste von Dateinamen und Erweiterungen erstellen, die dir /b > files.txtan einer Eingabeaufforderung im selben Verzeichnis wie Ihre Bilddateien geöffnet wird. In den meisten Fällen erhalten Sie damit mindestens 50% des Weges.

Ebenso können Texteditoren von Drittanbietern wie Notepad ++ (Windows) nützliche Funktionen haben. In Notepad ++ unterstützt es reguläre Ausdrücke sowie normale Textersetzung. So machen Sie zB:

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 

in:

image_01 image_02 image_03 image_04 

Für Notepad ++ könnten Sie:

  1. Entfernen Sie manuell die Dateien merge.bat, randomfile.extra und files.txt .

  2. Verwenden Sie SuchenErsetzen ... ( Ctrl+ H), um Erweiterungen (.eg .jpg) über leere Ersetzungen zu entfernen, und _frontzum Beispiel eine Reihe von Basisnamen für das Batch-Skript anzugeben:

     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. Sie können dann Search Mode: Regular expressionzu Zeilen wechseln, die _spine enthalten :

Notepad ++ Ersetzung von regulären Ausdrücken

Wählt im obigen Screenshot .+spine$alle Zeilen mit _spineam Ende aus. Sie können auch alle Zeilen entfernen, die _backmit enthalten .+back$, und etwa Folgendes wie folgt lassen:

 image_01  image_02  image_03  image_04 
  1. Diese Leerzeilen könnten dann mit beseitigt werden BearbeitenZeilen OperationenLeerzeilen entfernen, unsere endgültige Liste für das Verlassen files.txt :

    image_01 image_02 image_03 image_04 

Dies mag für vier Zeilen ineffizient erscheinen, aber da Sie sagen, dass Sie über 900 Artikel haben, kann eine Variation dieser Schritte eine Überlegung wert sein.