zur Übersicht nächste Seite

imagemagick Teil3

Generell gilt bei den weißen Textstellen auf dieser Seite: Man fügt die Zeichenfolge aus dem weißen Feld bei dem blinkenden Cursor des Terminals ein - dann drückt man die Eingabetaste.

Es werden hier nur einige Informationen von der ImageMagick-Internetseite übersetzt. Für eine komplette Dokumentation bitte dort nachschauen.

Es soll noch einmal das Zahlengif mit den sechs Zahlen von der vorhergehenden Seite angesprochen werden. Es hat den Namen deb6464.gif

Es besteht aus sechs Bild-Dateien in der Größe 30x30 

Genauere Informationen kann man erhalten durch
identify -format "%p canvas=%Wx%H size=%wx%h offset=%X%Y %D %Tcs\n" deb6464.gif
0 canvas=30x30 size=30x30 offset=+0+0 Undefined 50cs
1 canvas=30x30 size=30x30 offset=+0+0 Undefined 50cs
2 canvas=30x30 size=30x30 offset=+0+0 Undefined 50cs
3 canvas=30x30 size=30x30 offset=+0+0 Undefined 50cs
4 canvas=30x30 size=30x30 offset=+0+0 Undefined 50cs
5 canvas=30x30 size=30x30 offset=+0+0 Undefined 50cs

Der Unterschied zwischen canvas= und size= wird sich gleich zeigen.
Zu Beginn jeder Zeile steht die Speicher-Nummer des jeweiligen Bildes. Und einzelne Bilder lassen sich mittels \( -clone Speicher-Nummer \) bearbeiten. Aber es gibt auch die Möglichkeit Bilder mit Namen in einem mpr-Zwischenspeicher abzulegen durch
-write mpr:Zeichenfolge
Zeichenfolge kann ein beliebiger Name ohne Leerzeichen sein. Werden mehrere Bilder mit dem gleichen Namen belegt so werden diese durchnummeriert. Man kann diese Bilder mit ihrem Namen aufrufen ähnlich wie man Bilder von der Festplatte aufruft. Der Zwischenspeicher kann NICHT mit dem Datenstrom über eine pipe geschickt werden.
Bei dem folgenden Beispiel werden die 6 Einzelbilder von deb6464.gif mit dem Namen
eva
belegt und dann werden alle Bilder aus dem Datenstrom gelöscht. In dem leeren Datenstrom wird ein neues blaues Bild erzeugt und dann werden eva-Bilder aus dem mpr-Zwischenspeicher aufgerufen und einzeln auf dem blauen Bild positioniert.

convert deb6464.gif -write mpr:eva -delete 0--1 -size 114x114 xc:blue -page +6+6 mpr:eva[0] -page +42+6 mpr:eva[1] -page +42+42 mpr:eva[2] -page +78+42 mpr:eva[3] -page +6+78 mpr:eva[4] -page +78+78 mpr:eva[5] deb6501.gif

Es ist zu beachten daß bei diesem gif keine Anzeigedauern und kein loop 0 aufgeschrieben wurden. Diese Informationen sind im Datenstrom und auch im mpr-Zwischenspeicher mitgespeichert. Einzelheiten
identify -format "%p canvas=%Wx%H size=%wx%h offset=%X%Y %D %Tcs\n" deb6501.gif
0 canvas=114x114 size=114x114 offset=+0+0 Undefined 0cs
1 canvas=114x114 size=30x30 offset=+6+6 Undefined 50cs
2 canvas=114x114 size=30x30 offset=+42+6 Undefined 50cs
3 canvas=114x114 size=30x30 offset=+42+42 Undefined 50cs
4 canvas=114x114 size=30x30 offset=+78+42 Undefined 50cs
5 canvas=114x114 size=30x30 offset=+6+78 Undefined 50cs
6 canvas=114x114 size=30x30 offset=+78+78 Undefined 50cs

Nun erkennt man wie Bilder mit size=30x30 auf dem canvas=114x114 durch offset-Werte positioniert wurden.

Man kann die Zahlenbilder aneinanderhängen mit

convert deb6464.gif +append deb6502.gif

Es scheint ein ganz normales Bild zu sein aber
identify -format "%p canvas=%Wx%H size=%wx%h offset=%X%Y %D %Tcs\n" deb6502.gif
0 canvas=180x30 size=180x30 offset=+0+0 Undefined 50cs

Das Bild enthält immer noch die Anzeigedauer 50cs 
Man kann mit cut Bilder in Scheibchen schneiden, ähnlich einer Brotschneidemaschine. Hier wird von oben nach unten geschnitten

convert deb6502.gif -crop 30x0 +depth miff:- | montage - -tile 15x -geometry +6+6 -background black x:

Scheinbar hat man die einzelnen Zahlenbilder wieder zurückgewonnen. Aber
convert deb6502.gif -crop 30x0 +depth miff:- | identify -format "%p canvas=%Wx%H size=%wx%h offset=%X%Y %D %Tcs\n" -
0 canvas=180x30 size=30x30 offset=+0+0 Undefined 50cs
1 canvas=180x30 size=30x30 offset=+30+0 Undefined 50cs
2 canvas=180x30 size=30x30 offset=+60+0 Undefined 50cs
3 canvas=180x30 size=30x30 offset=+90+0 Undefined 50cs
4 canvas=180x30 size=30x30 offset=+120+0 Undefined 50cs
5 canvas=180x30 size=30x30 offset=+150+0 Undefined 50cs

Die mit -crop erzeugten Streifenbilder besitzen immer noch die canvas-Größe und die Informationen über die Positionen im ungeschnittenen Ausgangsbild. Damit werden beim Abspeichern als GIF die Streifen der Reihe nach an die ursprünglichen Positionen gesetzt. Und sie besitzen Anzeigedauer und loop 0
Zum besseren Sehen wird ein einfarbig blaues Anfangsbild eingefügt

convert deb6502.gif \( -size 180x30 xc:blue -set delay 60 \) \( -clone 0 -crop 30x0 \) -delete 0 deb6507.gif

Wenn es alleine um das Zuschneiden mit -crop geht ist es zu empfehlen danach mit +repage diese Informationen zu löschen. Aber diese Zusatzinformationen ermöglichen einfache Übergänge von einem Bild zu einem anderen Bild. Hier die beiden Bilder

    

convert deb6510.jpg deb6511.jpg \( -clone 0 -crop 4x0 \) \( -clone 1 -crop 4x0 \) -delete 0 -set delay 8 -loop 0 deb6515.gif

Man kann auch von rechts nach links schneiden
convert deb6510.jpg deb6511.jpg \( -clone 0 -crop 0x5 \) \( -clone 1 -crop 0x5 -reverse \) -delete 0 -set delay 6 -loop 0 deb6516.gif

Benutzt man -crop mit zwei Werten, beide von 0 verschieden, so wird eine Kachelwand erzeugt. Z.B.
convert deb6511.jpg -crop 30x25 +depth miff:- | montage - -tile 7x -geometry +6+6 -background violet x:

Hier erhält man 42 Bilder. Man kann diese Bilder mit dem Namen
Q
in den mpr-Zwischenspeicher legen und dann alle Bilder aus dem Datenstrom löschen. In dem leeren Datenstrom wird ein Grundbild (deb6510.jpg) eingelesen und dann werden Q-Bilder aus dem mpr-Zwischenspeicher aufgerufen und einzeln darauf gelegt. Anschließend wird eine Anzeigedauer festgelegt und die Anzeigedauer des eingelesenen Grundbildes vergrößert. Also

convert deb6511.jpg -crop 30x25 -write mpr:Q -delete 0--1 deb6510.jpg Q-Bilder-aus-mpr-Zwischenspeicher -set delay 10 -loop 0 \( -clone 0 -set delay 80 \) -swap 0 +delete deb6520.gif

Man muß sich mit dem mpr-Zwischenspeicher beschäftigen in dem 42 Bilder abgelegt wurden. Diese wurden durchnummeriert, beginnend mit 0, in der Reihenfolge von links nach rechts und in den Zeilen von oben nach unten. Also so wie bei der üblichen Schreibweise. Auf dem obigen Bild wurden die Nummern eingetragen. 

Nun möchte man von dem grün umrandeten Bild mit Nummer 17 die Reihenfolge nach dem grün markierten Weg aufrufen. Man schreibt die Nummern in der gewünschten Reihenfolge
17 18 25 24 23 16 9 10 11 12 19 26 33 32 31 30 29 22 15 8 1 2 3 4 5 6 13 20 27 34 41 40 39 38 37 36 35 28 21 14 7 0

for i in 17 18 25 24 23 16 9 10 11 12 19 26 33 32 31 30 29 22 15 8 1 2 3 4 5 6 13 20 27 34 41 40 39 38 37 36 35 28 21 14 7 0 ; do echo "mpr:Q[$i] "; done | tr -d '\n' | pr -t
mpr:Q[17] mpr:Q[18] mpr:Q[25] mpr:Q[24] mpr:Q[23] mpr:Q[16] mpr:Q[9] mpr:Q[10] mpr:Q[11] mpr:Q[12] mpr:Q[19] mpr:Q[26] mpr:Q[33] mpr:Q[32] mpr:Q[31] mpr:Q[30] mpr:Q[29] mpr:Q[22] mpr:Q[15] mpr:Q[8] mpr:Q[1] mpr:Q[2] mpr:Q[3] mpr:Q[4] mpr:Q[5] mpr:Q[6] mpr:Q[13] mpr:Q[20] mpr:Q[27] mpr:Q[34] mpr:Q[41] mpr:Q[40] mpr:Q[39] mpr:Q[38] mpr:Q[37] mpr:Q[36] mpr:Q[35] mpr:Q[28] mpr:Q[21] mpr:Q[14] mpr:Q[7] mpr:Q[0]

Einsetzen dieser Namensliste an der Stelle an der steht
Q-Bilder-aus-mpr-Zwischenspeicher
ergibt

convert deb6511.jpg -crop 30x25 -write mpr:Q -delete 0--1 deb6510.jpg mpr:Q[17] mpr:Q[18] mpr:Q[25] mpr:Q[24] mpr:Q[23] mpr:Q[16] mpr:Q[9] mpr:Q[10] mpr:Q[11] mpr:Q[12] mpr:Q[19] mpr:Q[26] mpr:Q[33] mpr:Q[32] mpr:Q[31] mpr:Q[30] mpr:Q[29] mpr:Q[22] mpr:Q[15] mpr:Q[8] mpr:Q[1] mpr:Q[2] mpr:Q[3] mpr:Q[4] mpr:Q[5] mpr:Q[6] mpr:Q[13] mpr:Q[20] mpr:Q[27] mpr:Q[34] mpr:Q[41] mpr:Q[40] mpr:Q[39] mpr:Q[38] mpr:Q[37] mpr:Q[36] mpr:Q[35] mpr:Q[28] mpr:Q[21] mpr:Q[14] mpr:Q[7] mpr:Q[0] -set delay 10 -loop 0 \( -clone 0 -set delay 80 \) -swap 0 +delete deb6520.gif

Anderes Beispiel

Wieder anderes Beispiel

Man kann Bilder gruppieren mit
-background none -flatten
also zum Beispiel
convert deb6511.jpg -crop 30x25 -write mpr:Q -delete 0--1 \( mpr:Q[26] mpr:Q[18] mpr:Q[10] mpr:Q[2] -background none -flatten \) +depth miff:- | montage - -tile 1x -geometry +6+6 -background khaki x:

Durch diese Gruppenbildungen kann man wieder ganz andere Übergänge erzeugen. Z.B. durch die Gruppen
0 14 28   \( mpr:Q[0] mpr:Q[14] mpr:Q[28] -background none -flatten \)
1 15 29   \( mpr:Q[1] mpr:Q[15] mpr:Q[29] -background none -flatten \)
2 16 30   \( mpr:Q[2] mpr:Q[16] mpr:Q[30] -background none -flatten \)
3 17 31   \( mpr:Q[3] mpr:Q[17] mpr:Q[31] -background none -flatten \)
4 18 32   \( mpr:Q[4] mpr:Q[18] mpr:Q[32] -background none -flatten \)
5 19 33   \( mpr:Q[5] mpr:Q[19] mpr:Q[33] -background none -flatten \)
6 20 34   \( mpr:Q[6] mpr:Q[20] mpr:Q[34] -background none -flatten \)
13 27 41  \( mpr:Q[13] mpr:Q[27] mpr:Q[41] -background none -flatten \)
12 26 40  \( mpr:Q[12] mpr:Q[26] mpr:Q[40] -background none -flatten \)
11 25 39  \( mpr:Q[11] mpr:Q[25] mpr:Q[39] -background none -flatten \)
10 24 38  \( mpr:Q[10] mpr:Q[24] mpr:Q[38] -background none -flatten \)
9 23 37   \( mpr:Q[9] mpr:Q[23] mpr:Q[37] -background none -flatten \)
8 22 36   \( mpr:Q[8] mpr:Q[22] mpr:Q[36] -background none -flatten \)
7 21 35   \( mpr:Q[7] mpr:Q[21] mpr:Q[35] -background none -flatten \)

Alles in der gewünschten Reihenfolge zusammenkopiert

convert deb6511.jpg -crop 30x25 -write mpr:Q -delete 0--1 deb6510.jpg \( mpr:Q[0] mpr:Q[14] mpr:Q[28] -background none -flatten \) \( mpr:Q[1] mpr:Q[15] mpr:Q[29] -background none -flatten \) \( mpr:Q[2] mpr:Q[16] mpr:Q[30] -background none -flatten \) \( mpr:Q[3] mpr:Q[17] mpr:Q[31] -background none -flatten \) \( mpr:Q[4] mpr:Q[18] mpr:Q[32] -background none -flatten \) \( mpr:Q[5] mpr:Q[19] mpr:Q[33] -background none -flatten \) \( mpr:Q[6] mpr:Q[20] mpr:Q[34] -background none -flatten \) \( mpr:Q[13] mpr:Q[27] mpr:Q[41] -background none -flatten \) \( mpr:Q[12] mpr:Q[26] mpr:Q[40] -background none -flatten \) \( mpr:Q[11] mpr:Q[25] mpr:Q[39] -background none -flatten \) \( mpr:Q[10] mpr:Q[24] mpr:Q[38] -background none -flatten \) \( mpr:Q[9] mpr:Q[23] mpr:Q[37] -background none -flatten \) \( mpr:Q[8] mpr:Q[22] mpr:Q[36] -background none -flatten \) \( mpr:Q[7] mpr:Q[21] mpr:Q[35] -background none -flatten \) -set delay 10 -loop 0 \( -clone 0 -set delay 80 \) -swap 0 +delete \( -clone -1 -set delay 80 \) +swap +delete deb6525.gif

Anderes Beispiel

Wieder anderes Beispiel


zur Übersicht nächste Seite

Datenschutzerklärung
Impressum