2014-02-12 9 views
5

Ich habe viele Bilder, verschiedene Größen und Seitenverhältnisse. Ist es möglich, eine Montage von ihnen zu machen? Ich meine, sie optimal in Reihen anzuordnen, nachdem ich eine gemeinsame Höhe für die Bilder eingestellt habe, die eine gemeinsame Reihe bilden. Bildseitenverhältnisse dürfen natürlich nicht verändert werden, und keines der Bilder darf aus der Endmontage noch Vervielfältigung auslassen.Wie kann ich mit ImageMagick Bilder aus Bildern mit unterschiedlicher Größe und unterschiedlichem Seitenverhältnis zusammensetzen?

Die Höhe der Bildzeilen in der Montage ist normalerweise nicht gleich, aber ihre Werte sollten in einem minimalen Bereich (im statistischen Sinne) gehalten werden, oder mit anderen Worten: Standardabweichung vom Mittelwert der Zeilenhöhen muss sein minimiert.

gewünschte Breite und Höhe der Montage gegeben sind (a.)

oder die Breite und ein zulässiger Verhältnisbereich (oder einen Bereich in äquivalenter Höhe) gegeben (b.), Beispielsweise Breite 1024 Pixel sein muß, Höhe muss so sein, dass w/h < 0,9 und w/h> 0,8

1.) Bilder müssen in der Montage in ihrer ursprünglichen festen Reihenfolge verpackt werden. In diesem Fall muss man die Bilder suchen, nach denen eine neue Bildzeile in der Montage gestartet werden soll (einfach).

2.) Reihenfolge der Bilder darf geändert werden. In diesem Fall muss man eine Permutation finden, die zu einer Minimierung der Standardabweichung der letzten Zeilenhöhen führt, wenn jedes Bild in die Montage (hart) gepackt wird.

Zum Beispiel:

enter image description here

enter image description here

+0

Wenn es ein „einmal im Leben“ Aufgabe ist, würde ich eine der vielen Online-Dienste empfehlen. Sie bieten kreative Möglichkeiten zum Zusammenstellen von Bildern. Der Bildmontage-Befehl von ImageMagick arrangiert keine Bilder mit unterschiedlichen Größen/Seitenverhältnissen. – Aziraphale

+1

Denken Sie darüber nach, mehrere Bilder zu arrangieren, so wie es unsere Lieblingssuchmaschine mit den Bildern der Suchergebnisse macht? Oder denken Sie an etwas, das ausgeklügelter ist, wie das "Trim-Loss-Problem" ("Ein regelbasierter Ansatz für das Trim-Loss-Problem", Int. J. Prod. Res. 20, S. 401-415, 1991)? Anyway - interessante Frage ... – leu

+0

Ich verstehe nicht wirklich, was Sie wollen. Wenn Sie für alle eine gemeinsame Höhe oder Breite festlegen und diese auch "beschneiden" können, ist es auch kein Problem, sie "optimal anzuordnen". Oder was verstehe ich nicht? –

Antwort

4

Ich bin nicht sicher, ob ich das richtig verstehe Ihre Frage.

Hier ist was ich daraus mache. Angenommen, Sie haben 8 verschiedene Bilder in verschiedenen Größen. Für Demozwecke, lasse ich ImageMagick diese als 8 verschiedene Farbfelder erstellen:

convert -size 90x90 xc:yellow y.png 
convert -size 120x120 xc:red  r.png 
convert -size 60x210 xc:green g.png 
convert -size 150x180 xc:blue b.png 
convert -size 30x60 xc:cyan c.png 
convert -size 150x90 xc:magenta m.png 
convert -size 90x120 xc:gray Gr.png 
convert -size 120x90 xc:black K.png 

Sie diese Patches auf viele verschiedene Arten montage können:

convert \(y.png r.png g.png b.png +append \) \ 
     \(c.png m.png Gr.png K.png +append \) \ 
     -append         \ 
     -mattecolor lightblue     \ 
     -frame 1x1        \ 
     montage0.png 

Dieser Befehl ist nicht die verschiedenen Patches skaliert. Sie legt sie in 2 Reihen à 4 Felder und montiert sie in ihren Originalgrößen.Die weißen Bereiche sind, wo die Flecken nicht „passen“:

montage0.png

convert \(y.png r.png g.png b.png -resize x60 +append \) \ 
     \(c.png m.png Gr.png K.png -resize x60 +append \) \ 
     -append            \ 
     -mattecolor lightblue        \ 
     -frame 1x1           \ 
     montage1.png 

Dieser Befehl Skalen alle verschiedenen Patches an eine gemeinsame Höhe von 60 Pixel (ihren jeweiligen Seitenverhältnisse Konservieren) und legt sie in 2 Reihen a 4 Patches:

montage1.png

convert \(y.png r.png g.png b.png -resize 60x +append \) \ 
     \(c.png m.png Gr.png K.png -resize 60x +append \) \ 
     -append            \ 
     -mattecolor lightblue        \ 
     -frame 1x1           \ 
     montage2.png 

Dieser Befehl Skalen alle verschiedenen Patches an eine gemeinsame Breite von 60 Pixel (ihre jeweiligen Seitenverhältnisse Konservieren) und legt sie in 2 Reihen A 4 Patches:

montage2.png

convert \(y.png r.png g.png b.png -resize 60x80\! +append \) \ 
     \(c.png m.png Gr.png K.png -resize 60x80\! +append \) \ 
     -append             \ 
     -mattecolor lightblue         \ 
     -frame 1x1            \ 
     montage3.png 

Dieser Befehl Skalen alle verschiedenen Patches zu Abmessungen von 60x80 Pixeln (ihre ursprünglichen Aspektverhältnisse überschreiben) und legt sie in zwei Reihen ein 4-Patches:

montage3.png

Verwandte Themen