Wie kann ich Bilder anhand dieser Trennlinien mit [ImageMagick teilen?]
Die einfachste Lösung wäre wahrscheinlich die Verwendung von -crop wie folgt :
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%02d.jpg
Dieser Befehl:
Unterteilt jedes Bild in 6 (ungefähr) gleich große Kacheln ( -Schnitt 3x2 @ ) und nummeriert jedes Bild nacheinander.
Startet die Nummerierungssequenz bei
1
( -szenieren 1 ) und nicht0
.Gibt den endgültigen Zahlen ein
0
-padding (%02d
) in den einzelnen Ziffern [01-09
].
Befehlsnotizen
Es ist zwar möglich, eine exakte Größe (z. B.
1000x1000
) anzugeben oder Prozentsätze (z. B.33%x50%
) für einen Kachelschnitt zu verwenden, dies kann jedoch auch "trimmende" Bilder erzeugen (wahrscheinlich unerwünscht).Durch die Verwendung von z. B. werden
-3x2@
normalerweise Bilder erstellt, deren Größe (relativ zueinander) näher liegt als der Prozentsatz "Überschießen" (z. B.33.4%x50%
), um zu vermeiden, dass "Trimmbilder" erzeugt werden.In einer Batchdatei müssen Sie die Prozentzeichen verdoppeln, damit sie wie vorgesehen funktionieren:
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%%02d.jpg
Wenn Sie in einem Format schreiben, das Bild- / Leinwand-Offsets enthalten kann (z. B.
.png
), möchten Sie möglicherweise + repage nach Ihrem einfügen-crop
:convert -crop 3x2@ +repage -scene 1 image1.jpg image2.jpg cropped_%02d.png
Wenn Ihre Eingabeformate Bild- / Canvas-Offsets enthalten können, möchten Sie möglicherweise
+repage
auch diese.
Umbenennung
Ist es möglich, sie anhand der oben beschriebenen Reihenfolge automatisch zu nummerieren?
Mit ImageMagick allein war ich dazu nicht in der Lage (ich vermute, dass dies wahrscheinlich nicht möglich ist, aber ich bin mir ehrlich gesagt nicht sicher). Abgesehen von ImageMagick ist dies natürlich völlig möglich.
Da Sie diese Frage mit einem Tag versehen haben batch
, ist es erwähnenswert, dass ich nicht mit guten Lösungen im Batch helfen kann. Angesichts dessen scheint es sehr wahrscheinlich, dass Sie (oder jemand anderes) in der Lage sind, etwas Besseres zu finden, als das, worauf ich unten eingehen möchte.
Obligatorische Charge (Nicht-) Antwort
Die Umbenennung durch Brute-Force ist mit Batch möglich. Benennen Sie zunächst jede Datei (außer der ersten und letzten) vorübergehend um, zB:
rename cropped_02.jpg cropped_02_temp.jpg [...] rename cropped_11.jpg cropped_11_temp.jpg
Benennen Sie sie dann wieder in ihre neuen Positionen um, zB:
rename cropped_02_temp.jpg cropped_03.jpg rename cropped_03_temp.jpg cropped_05.jpg rename cropped_04_temp.jpg cropped_07.jpg rename cropped_05_temp.jpg cropped_09.jpg rename cropped_06_temp.jpg cropped_11.jpg rename cropped_07_temp.jpg cropped_02.jpg rename cropped_08_temp.jpg cropped_04.jpg rename cropped_09_temp.jpg cropped_06.jpg rename cropped_10_temp.jpg cropped_08.jpg rename cropped_11_temp.jpg cropped_10.jpg
Batch ist in der Lage, Argumente aus der Befehlszeile zu übernehmen und Mathematik auszuführen sowie for
Schleifen und if
Anweisungen usw. zu besitzen, sodass diese Lösung (offensichtlich) verbessert werden kann.
Anmerkungen umbenennen
Wenn Sie sich die zweite Hälfte des Umbenennungsvorgangs oben ansehen, werden Sie ein Muster in den Dateinamen bemerken. Für eine bestimmte Position N können wir effektiv eine der folgenden zwei Formeln verwenden, um die neue Position eines Elements in Ihrem Schema zu finden:
- Artikel bis zum "halben" Punkt (zB 2-6):
(Position_N * 2) - 1
- Artikel jenseits des "Halfway" -Punkts (zB 7-11):
(Position_N * 2) - Total_Items
Hinweis: Es ist zwar möglich, diese Formeln auf eine gesamte Sequenz anzuwenden (z. B. 1 und 12), jedoch ändern die ersten und letzten Elemente niemals ihre Position. Dies macht eine Umbenennung wohl unnötig.
Außerdem sollten diese für jede gerade (nicht gerade) Anzahl von Positionen / Positionen (4 oder mehr) funktionieren, vorausgesetzt, Ihre Dateinamen sind in Ordnung (z. B. 1 bis 12). Also für deine ursprünglichen Beispiele:
Temp Item 2 becomes (2 * 2) - 1 = Item 3 Temp Item 7 becomes (7 * 2) - 12 = Item 2 Temp Item 8 becomes (8 * 2) - 12 = Item 4 [...]
Daher können die angegebenen Formeln möglicherweise die Basis für Batch-Lösungen (oder andere Skriptlösungen) sein. Es gibt jedoch ein paar andere Dinge, die Sie beachten sollten, wenn Sie sich entscheiden, sie als solche zu verwenden ...
Sortierung
Die Sortierung (wie oben angesprochen) kann praktische Konsequenzen haben, zum Beispiel in Skripts, da von Windows zurückgegebene Elemente die angegebenen Formeln "brechen". Insbesondere:
Windows sortiert Namen standardmäßig in lexikografischer Reihenfolge. Dies bedeutet, dass Elemente, die keine
0
einzelnen Ziffern enthalten (z. B. image_1.jpg vs. image_01.jpg ), nicht in (natürlicher) Reihenfolge angezeigt werden, wenn sie direkt von Windows zurückgegeben werden. Das heißt, sie werden zurückgegeben als zB:cropped_1.jpg, cropped_10.jpg, cropped_11.jpg, cropped_12.jpg, cropped_2.jpg, etc.
Bestimmte Wörter und Ausdrücke (z. B.
- Copy
) in Dateinamen können auch die Reihenfolge beeinflussen, in der Dateinamen zurückgegeben werden.
Wenn Sie die obigen Formeln verwenden, stellen Sie sicher, dass 0
Sie in Ihren Dateinamen einzelne Ziffern eingeben und Dinge entfernen - Copy
(oder andere Schritte unternehmen, um diese Probleme zu beheben ).
Schleifen / Zähler beginnend mit 0
Wenn Sie eine Sprache verwenden, die mit dem Zählen beginnt 0
(z. B. in Schleifen), können sich die Formeln dadurch geringfügig ändern:
- Artikel bis zum "halben" Punkt (zB 1-5):
(Position_N * 2)
- Artikel jenseits des "Halfway" -Punkts (zB 6-10):
(Position_N * 2) - (Total_Items - 1)
Denken Sie daran, dass bei einer Zählung von 0 12 Artikel ausgeführt würden 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
.
Ein Python-Skript
Wenn Sie interessiert sind, habe ich ein kleines (wahrscheinlich furchtbares) Python-Skript für Python 3.x (getestet mit 3.6.4) geschrieben, das von der Befehlszeile aus verwendet werden kann, um beliebige Dateien, die in der Reihenfolge liegen, umzubenennen (z . B. cropped_01. jpg ... cropped_XX.jpg ) auf die in Ihrer Frage angegebene Reihenfolge. Sie müssen eine Kopie von Python installieren, wenn Sie es ausprobieren möchten.
Einschränkungen
Liest nicht aus Textdateien nach Informationen (also keine Angabe einer Liste von Dateien zu diesem Zeitpunkt). Auf der Kommandozeile sind ebenfalls ein Bild- / Dateinamen-Präfix und eine Erweiterung erforderlich.
Das Skript erwartet, dass die Dateinamen automatisch in der richtigen Reihenfolge zurückgegeben werden (siehe Windows und
0
-Padding oben).Es gibt eine Option, ein Drittanbieter-Modul zu verwenden, das aufgerufen wird
natsort
(installiert mit z. B.python -m pip install natsort
), wenn Ihre Artikel nicht mit0
-padded sind. Sie müssen jedoch nach der Installation die Zeilen 13 (from natsort import natsorted
) und 105 (item_list = list(natsorted(item_list))
) im Skript auskommentierennatsort
, um diese Option verwenden zu können.
Um es klar zu sagen, bedeutet "unkommentieren", den #
führenden Platz am Anfang der Zeile zu entfernen . Zusätzliche Anweisungen zur Verwendung sind im Skript enthalten.