Ich habe ein paar Fotos. Sie sind alle gleich groß und ich versuche, sie mithilfe von ImageMagicks Montageprogramm über Bash zu einem zusammengesetzten Bild zusammenzufügen. Das Problem ist, dass die Kachelgröße (ein Bild belegt eine Kachel) standardmäßig dem Bild mit den größten Abmessungen entspricht. Schmale Bilder sind daher von viel Weißraum umgeben. Ich möchte diesen Leerraum entfernen. Wie kann ich es tun?
bash
imagemagick
image-manipulation
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
Antworten:
Versuchen Sie so etwas:
Dadurch wird die Grenze zwischen den Bildern so klein wie möglich und alles, was vorhanden ist, wird transparent.
Um eine Demo des Unterschieds mit integrierten Bildern zu sehen, probieren Sie diese aus und vergleichen Sie:
Siehe Montageverwendung .
Wenn Sie ein Beispiel für das, was Sie erhalten, veröffentlichen und ein Beispiel für das, was Sie möchten, manuell bearbeiten, können wir dem möglicherweise ein wenig näher kommen.
Hier sind Beispiele, die mir besser gefallen als die, die ich ursprünglich oben gepostet habe:
quelle
Ich stimme der akzeptierten Antwort
-geometry +0+0
zu, zusätzlichen Kachelplatz zu entfernen, und füge-mode Concatenate
(unter bestimmten Bedingungen) hinzu.Auch wenn Sie unterschiedliche Größen haben
montage
, wird es ein bisschen schwierig, zwischen "Kachelhintergrund" (Kachelraum) und "Rahmen" und "Rand" zu unterscheiden - ich verliere oft den Überblick, daher hier ein kleiner Testfall mit (anklickbare) Bilder:Nun, ich hoffe, dies kann nützlich sein,
Prost!
BEARBEITEN: Ich habe eine kleine Python / Tkinter / PIL-GUI für ImageMagick, tkGui_ImageMagick.py, zusammengestellt und konnte schließlich die richtige Befehlszeile für etwas finden, das ich wollte: eine Montage von vier Bildern, wobei die Höhe und Breite der Kacheln werden an die größte Breite dieser Spalte (oder Höhe der Zeile) angepasst.
In diesem Beispiel stehen img1 (200x100) und img2 (300x200) in der ersten Spalte. Die größere Breite beträgt 300 - dies sollte die Kachelbreite von img1 festlegen. Außerdem muss die Höhe von img1 mit der größeren Höhe von img3 (300 px) korreliert sein, mit der es eine Zeile bildet. Dies kann über den
extent
Operator festgelegt werden (siehe auch ImageMagick • Thema anzeigen - Größe ändern und Pad statt Strecken ). Und diese Befehlszeile erfordert Unterprozessaufrufe, ummontage
s für jede Spalte und von dortconvert
für jedes Bild zu trennen :Beachten Sie hier, wenn wir
-extents
direkt in der Montagezeile verwendet hatten, wie folgt:... wir werden bemerken, dass die erste Angabe für die Höhe (200) ignoriert wird und 400 als größer auf beide Kacheln angewendet wird !
Daher müssen wir das Auffüllen jedes einzelnen Bildes kontrollieren (durch Aufrufen
convert
vonextents
für jedes ) - und dannextents
in dermontage
Zeile vermeiden ; und als solches müssen wir a priori die (größte) Breite jeder Spalte (und Höhe jeder Zeile) kennen. Beachten Sie auch:convert
) werdenmontage
, muss normalerweise nachher-gravity
kommen (vollständig spezifiziert: w & h) ; in , arbeitet vorher (normalerweise)-extent
convert
-gravity
-extent
quelle
Nicht mit
montage
, fühlt sich aber genauer an mit:x500
die gewünschte Endhöhe istquelle