zur Übersicht nächste Seite

imagemagick Teil7

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 werden die Bilder deb6510.jpg und deb6511.jpg von den vorhergehenden Seiten verwendet.

Wenn die Maske nur aus schwarzen und weißen pixeln besteht so erzeugt
Bild1 Bild2 Maske -composite
eine klare Trennung von darunterliegendem und darüberliegendem Bild.
Wenn die Maske auch Grauabstufungen enthält so erzeugt
Bild1 Bild2 Maske -composite
eine Vermischung der beiden Bilder

    

Also erzeugt man eine Maske, ein schwarz-grau-weißes Bild
convert -size 200x145 xc:white -size 200x25 gradient: -size 200x145 xc:black -append deb6905.png
Oder gleich eine ganze Folge von Masken
for i in {0..17}; do let f=i*10; let i=i+1; convert deb6905.png -crop 200x145+0+$f +depth miff:- ; done | montage - -tile 5x -geometry +6+6 -background khaki x:

Damit läßt sich ein schönes anschauliches gif basteln
for i in {0..17}; do let f=i*10; let i=i+1; convert deb6510.jpg deb6511.jpg \( deb6905.png -crop 200x145+0+$f \) -composite -set delay 8 -loop 0 +depth miff:- ; done | convert - \( -clone 0--1 -reverse \) -layers optimize deb6914.gif

Die Vermischung der beiden Bilder wird durch halbtransparente pixel erzeugt. Deshalb ist es gut etwas über transparente und halbtransparente pixel zu wissen. Vor allem muß man ein Dateiformat haben das diese pixel auch anzeigt. Das gif-Format kann nur völlige Transparenz anzeigen, das jpg-Format (wie viele andere Bildformate) kann Transparenz nicht anzeigen. Das png-Format kann transparente und halbtransparente pixel anzeigen. Da aber Internetbrowser bei png oft Anzeigeprobleme haben sind auf unseren Seiten oft jpg und gif zur Darstellung von png verwendet worden.
Farben können durch Nummern in HEX-Code angesprochen werden, z.B. rot durch #FF0000. Transparente oder halbtransparente pixel können durch Anhängen von zwei weiteren Werten angesprochen werden:
for i in 00 30 60 90 C0 FF ; do convert -size 30x30 xc:#FF0000$i -size 3x30 xc:black +append +depth miff:- ; done | convert - +append deb6908.png

Dabei bezeichet
FF fully-opaque (keinerlei Transparenzanteil)
00 fully transparent (keinerlei Farbanteil).
Alle pixel mit Farbnummern die mehr als 6 Zeichen haben werden in einem alpha-Kanal zusammengefaßt (sofern diese nicht FF am Ende haben).
-alpha set bedeuted daß HEX-Farbnummern auf 8 Zeichen erweitert werden,
-alpha off bedeuted daß HEX-Farbnummern auf 6 Zeichen reduziert werden.

Transparenz kann man erreichen durch eine Maske (schwarz-grau-weißes Bild wie oben verwendet)
Dabei ist schwarz fully transparent und weiß fully-opaque. Z.B.
convert -size 200x145 xc:black -fill white -draw "circle 133,44 133,88" deb6950.png

Bei dem folgenden Vorgehen ist es wichtig einen möglichen alpha-Kanal abzuschalten damit dieser neu erzeugt werden kann. Und gerade bei png-Bildern ist der alpha-Kanal aktiv - schließlich soll Transparenz angezeigt werden können.
convert deb6510.jpg deb6950.png -alpha Off -compose CopyOpacity -composite deb6952.png

    

convert deb6510.jpg \( deb6950.png -negate \) -alpha Off -compose CopyOpacity -composite deb6953.png

    

Speichert man das Bild deb6952.png (oder deb6953.png) als jpg-Bild ab so werden die HEX-Farbnummern auf 6 Stellen reduziert und alles aus dem alpha-Kanal wird wieder vollständig sichtbar. Beim Abspeichern als gif-Bild bleibt nur die vollständige Transparenz erhalten, alle halbtransparenten pixel werden volltransparent.

Das Erzeugen einer Maske ist manchmal schwierig. Wenn man aus deb6510.jpg das Motiv des Hundes Rene maskieren möchte, so macht man dies vorteilhaft über gimp
deb6919.gif

Das Originalbild deb6510.jpg hat beinahe 20000 Farben. Diese Farbanzahl kann man reduzieren mit
-posterize
Gute Werte sind 2 3 4 5
Je kleiner die Zahl ist umso weniger Farben sind vorhanden.
for i in 2 3 4 5 ; do convert deb6510.jpg -posterize $i +depth miff:- ; done | montage - -tile 4x -geometry +6+6 -background khaki x:

Die Konturen des Motives sollen noch gut zu erkennen sein. Daher wurde
-posterize 4
gewählt. Die enthaltenen Farben kann man bestimmen durch
convert deb6510.jpg -posterize 4 -format %c -depth 8 histogram:info:-

746: (0,0,0) #000000 black
11: (0,0,85) #000055 srgb(0,0,85)
15: (0,85,0) #005500 srgb(0,85,0)
2: (0,85,85) #005555 srgb(0,85,85)
1653: (85,0,0) #550000 srgb(85,0,0)
17: (85,0,85) #550055 srgb(85,0,85)
3261: (85,85,0) #555500 srgb(85,85,0)
3689: (85,85,85) #555555 srgb(85,85,85)
26: (85,85,170) #5555AA srgb(85,85,170)
3: (85,170,0) #55AA00 srgb(85,170,0)
39: (85,170,85) #55AA55 srgb(85,170,85)
4: (85,170,170) #55AAAA srgb(85,170,170)
1: (170,0,0) #AA0000 srgb(170,0,0)
122: (170,85,0) #AA5500 srgb(170,85,0)
2481: (170,85,85) #AA5555 srgb(170,85,85)
22: (170,85,170) #AA55AA srgb(170,85,170)
3300: (170,170,85) #AAAA55 srgb(170,170,85)
7057: (170,170,170) #AAAAAA srgb(170,170,170)
232: (170,170,255) #AAAAFF srgb(170,170,255)
4: (170,255,170) #AAFFAA srgb(170,255,170)
17: (170,255,255) #AAFFFF srgb(170,255,255)
11: (255,0,0) #FF0000 red
10: (255,0,85) #FF0055 srgb(255,0,85)
12: (255,85,0) #FF5500 srgb(255,85,0)
7: (255,85,85) #FF5555 srgb(255,85,85)
1936: (255,170,85) #FFAA55 srgb(255,170,85)
2204: (255,170,170) #FFAAAA srgb(255,170,170)
208: (255,170,255) #FFAAFF srgb(255,170,255)
389: (255,255,170) #FFFFAA srgb(255,255,170)
1521: (255,255,255) #FFFFFF white


Am Anfang steht die Anzahl der pixel für die jeweilige Farbe.
Die Anzahl der Farben ist 30. Am besten speichert man das farbreduzierte Bild ab
convert deb6510.jpg -posterize 4 deb6510R.png
Es wäre vorteilhaft wenn man die Farben sichtbar darstellt:
convert deb6510R.png -format %c -depth 8 histogram:info:-| while read Anz ju1 color ju2; do convert -label "$color :$Anz" -size 120x20 xc:$color +depth miff:-; done | montage - -frame 5 -tile 5x -geometry +2+2 -background khaki deb6990F.gif

Man kann eine Farbe ersetzen durch
-fill 'neue' -opaque 'alte'
Dies wird jetzt für einige Farben durchgeführt und dann das Bild von Hund Rene über die Maske wieder eingesetzt:
convert deb6510R.png -fill '#AA55AA' -opaque '#AAAAAA' -fill '#550055' -opaque '#FFFFFF' -fill '#55AA00' -opaque '#555500' -fill '#005500' -opaque '#555555' +depth miff:- | convert - deb6510.jpg deb6919.gif -composite deb6960.jpg

Man kann mit -modulate Farbänderungen bewirken
for i in 10 20 40 60 70 80 100 130 150 160 180 ; do convert deb6960.jpg -modulate 100,100,$i deb6510.jpg deb6919.gif -composite +depth miff:- ; done | convert -delay 15 - -loop 0 -layers optimize deb6980.gif

Man kann das Motiv von Hund Rene ausschneiden
convert deb6510.jpg deb6919.gif -alpha Off -compose CopyOpacity -composite deb6970.png

Dieses ausgeschnittene Motiv wird jetzt in anderes Bild positioniert

convert deb6998.jpg deb6970.png -geometry +0+15 -composite deb6971.jpg

Man kann das Motiv von Hund Rene erscheinen lassen


zur Übersicht nächste Seite

Datenschutzerklärung
Impressum