Quelle1)
Ein Ursprungsbild im Format JPEG soll umgewandelt und gespeichert werden als PNG.
Das Ursprungsbild (hier bild.jpg) soll dabei erhalten bleiben. Der entstehende Bildtype wird durch die Endung des Ausgangsbildes (hier .png) vorgegeben.
convert bild.jpg bild.png
Zusätzlich zu der Formatumwandlung möchten wir aber auch die Größe des Ausgangsbildes ändern.
Wir möchten dabei das Seitenverhältniss des Orginalbildes jedoch beibehalten aber die Höhe und Breite auf jeweils 640 Pixel begrenzen. Hochkanntbilder haben dann 640 Pixel Höhe und normale Bilder haben 640 Pixel Breite, immer bei Beibehaltung der Seitenverhältnisse des Orginalbildes
convert bild.jpg -resize 640x640 bild.png
Um ein Bild unabhängig der Seitenverhältnisse auf eine ganz bestimmte Pixelgröße zu zwingen, benutzt man ein Ausrufezeichen hinter der Größenangabe.
convert bild.jpg -resize 300x280! bild.png
Es ist auch möglich das Bild prozentuel zu vergößern oder zu verkleinern.
convert bild.jpg -resize 50% bild.png
Um nun nur einen Teil eines Bildes zu verarbeien kann man diesen aus dem Gesamtbild ausschneiden mit der Option '-crop
'
convert logo: -crop 200x200+310+100 +repage x:
Dieser Befehl hat gleich einige Besonderheiten auf die wir eingehen wollen.
'logo:
' Dieses ist das ImageMagick-Logo das in die Sortware eingebaut ist und das kann man hervorragend zum Testen benutzen. 'x:
' Hierbei handelt es sich um eine spezielle Ausgabe, und zwar wird das Bild gleich auf der X-Oberfläche angezeigt. Es hat die selbe Auswirkung wie das Beispiel unter display nur hier viel kürzer zu schreiben und mit einem abgespecktem Display-Programm. Wenn der Befehl das gewünschte Ergebnis erbringt, braucht man es nur gegen einen Bilderdateinamen auszutauschen. Man kann also auf diese Art und Weise sehr einfach anschauen, was ein Befehl für ein Bild erzeugen würde, bevor man in irgendwelche Dateien schreibt.
: '200×200+310+100
' bedeutet 200×200 Bildpunkte ab der Position 310 Bildpunkte nach rechts und 100 Bildpunkte nach unten.
'[http://www.imagemagick.org/script/command-line-options.php?#repage +repage]
' mit dieser Option entfernen wir beim beschneiden mit -crop aus dem Header des Bildes die „canvas und offset“ Werte, die würden sonst beim Beschneiden falsch stehen bleiben.convert logo: -gravity Center -crop 75%x+0+0 +repage x:
hier wird ebenfalls -crop verwendet. Wir schneiden vom Bild 75% aus, und zwar wurde mit der Option '[http://www.imagemagick.org/script/command-line-options.php?#gravity -gravity]
' und dem Versatz von '+0+0
' die Mitte des Bildes bestimmt. Dieser Befehl schneidet also an den Rändern des Bildes 25% ab, egal wie groß das Bild ist. So etwas würde sich zB anbieten als erste Bearbeitungsstufe für die Erstellung von vergrößerten Vorschaubildern uä.
manchmal ist es erforderlich, das man sehr große Bilder in Einzelbilder aufteilt. hier ein Beispiel wie man ein Bild in 4 Teilbilder zerlegt und dann wieder zusammenbaut.
# convert logo: -depth 16 testa.png #TestBild testa.png erzeugen # convert testa.png -crop 50% test_%d.png #Aufteilen des Bildes in 4 Teile # montage -mode concatenate -tile 2x2 test_?.png testf.png #Zusammenbau der 4 Teile zu einem Bild testf.png # # identify test*.png #Bildinformationen der 6 Bilder anzeigen lassen test_0.png PNG 320x240 640x480+0+0 DirectClass 16-bit 37.0449kb test_1.png[1] PNG 320x240 640x480+320+0 DirectClass 16-bit 48.9062kb test_2.png[2] PNG 320x240 640x480+0+240 DirectClass 16-bit 5.42773kb test_3.png[3] PNG 320x240 640x480+320+240 DirectClass 16-bit 45.5645kb testa.png[4] PNG 640x480 640x480+0+0 DirectClass 16-bit 141.48kb testf.png[5] PNG 640x480 640x480+0+0 DirectClass 16-bit 141.459kb # compare testf.png testa.png x: #nach Differenzen zwischen testf.png und testa.png suchen
'-depth 16
' : damit legen wir die Farbtiefe genau fest.'-crop 50%
' in dieser Kombination mit der Angabe der multiblen Ausgabedatei(en) erzeugt genau 4 Teilbilder vom Gesamtbild'concatenate -tile 2×2
' bedeutet ohne Zwischenraum mit einer Geometrie 2×2 Bilder.Es gibt in ImageMagick 4 einfache Möglichkeiten Bilder zu spiegelen<br>
'-flip
''-flop
''-transpose
''-transverse
'Beispiele mit dem Logo und Ausgabe anstatt in eine Datei gleich Anzeige mit display:
convert logo: -flip x:
convert logo: -flop x:
convert logo: -transpose x:
convert logo: -transverse x:
Bilder drehen kann man mit dem Operator '-rotate x
' (wobei x die Drehung in Grad bestimmt)<br>
Beispiele mit dem Logo und Ausgabe anstatt in eine Datei gleich Anzeige mit display
convert logo: -rotate 90 x: convert logo: -rotate -90 x: convert logo: -rotate -130 x:
Zu beachten ist, bei Drehungenswinkeln die nicht durch 90 teilbar sind, wird die Bildgröße verändert, warum zeigt das nächste Beispiel.
convert logo: -background blue -rotate 45 x:
Beim Drehen gibt es noch eine nette Erweiterung, wir können an Hand des Seitenverhältnisses bestimmen, ob das Bild gedeht werden soll oder nicht. Diese Option kann man gelegentlich bei der automatischen Bildbearbeitung in Scripten sehr gut gebrauchen.
* ein '<
' direkt hinter der Winkelangabe bedeutet, das Bild wird nur gedeht wenn es höher als breit ist
* ein '>
' direkt hinter der Winkelangabe bedeutet, das Bild wird nur gedeht wenn es breiter als hoch ist.
( da es sich hierbei um Sonderzeichen handelt die die Shell anders interpretieren würde, müssen wir diese vor der Interpretation in der Shell schützen
)
convert logo: -resize 200x150! -rotate "90<" x: convert logo: -resize 150x200! -rotate "90<" x: convert logo: -resize 150x200! -rotate 90\< x: convert logo: -resize 200x150! -rotate 90\< x:
Wenn wir wild umeinander fotografieren machen wir nicht nur breitformatige Bilder sondern gelegentlich auch hochformatige Bilder (Porträtformat). Einge teure Kameras registrieren das auch, oder Bildbearbeitungssoftware trägt das so bei Bearbeitung der Bilder in den Bildheader ein. Wenn wir uns jetzt die so entstandenen Bilder zB im Konqueror ansehen, dann korrigiert der Konqueror die Ausrichtung der Bilder automatisch, auch die Bildervorschau und thumbnails im Konqueror ist richtig. Andere Bildanzeigeprogramme zB [http://man.cx/xv xv] oder auch GIMP zeigen die Bilder aber nach wie vor im Breitformat. Zuständig für diese Automatik der automatischen Ausrichtung in einigen Programmen ist die [http://de.wikipedia.org/wiki/EXIF EXIF]:Orientation diese können wir in den Bildern abfragen mit
# identify -format '%[exif:orientation]' bildname.jpg
wird hier eine '1
' (TopLeft
) zurückgeliefert, dann ist dort eingetragen: das Bild ist richtig ausgerichtet.
In den neueren Versionen (ca. ab IM 6.2.8) kann man mit ImageMagick auch mit diesen Optionen arbeiten. Am Besten ihr testet mal ob eure Version das unterstützt.
# convert -list Orientation
bringt entweder einen Fehler, das es nicht unterstützt wird, oder folgende Ausgabe
TopLeft TopRight BottomRight BottomLeft LeftTop RightTop RightBottom LeftBottom
Ihr könnt den Eintrag der Orientation eurer Bilder ändern ohne die Bilder dabei selbst zu drehen.
# mogrify -orient RightTop bildname.jpg #für Bilder bei denen oben am linken Rand ist
# mogrify -orient LeftBottom bildname.jpg #für Bilder bei denen oben am rechten Rand ist
# mogrify -orient TopLeft bildname.jpg #für richtig gedrehte Bilder die aber jetzt falsch angezeigt werden
das alles unter der Bemerkung des Beispiels ,das die Bildqualität damit zumindestens nicht besser wird. (Achtung: im Beispiel ist der Befehl mogrify verwendet.
] Wenn ihr sowas wirklich Qualitätsverlustfrei machen wollt, ist [http://www.sentex.net/~mwandel/jhead JHead] als Programm besser geeignet.
Zum Anzeigen und Verarbeiten der Bilder entsprechend der richtigen Orientation gibt es in ImageMagick die Option
[http://www.imagemagick.org/script/command-line-options.php?#auto-orient -auto-orient]
# display -resize 800×800 -auto-orient bild.jpg
zeigt ein Bild entsprechend der EXIF Orientation richtig an, convert und die anderen Befehle zur Bildbearbeitung nutzen analog die selbe Option.
Weiterführende Informationen zu diesem Thema gibts [http://www.imagemagick.org/Usage/photos/#orient hier]
Hin und wieder braucht jemand von seinen Fotos für irgendwelche Zwecke Musterbilder. Diese Bilder sollen für andere zwar ansehbar und auch in einer geminderten Qualität aber nicht weiterverwendbar sein. Hier reicht es nicht aus, die Bilder am Rand zu beschriften oder irgendwo in die Ecke ein kleines Logo zu setzen. Es soll am besten ein riesen Logo quer über das Bild, damit man es nicht wegschneiden kann.
Folgendes Script kann das erledigen.
#/bin/bash
# Das Script sucht im aktuellem Verzeichnis nach ".jpg"-endenden Dateien und nimmt an es handelt sich um Bilder
# von den Bildern werden Kopien definierter Groesse gemacht und mit Text-Wasserzeichen versehen
# den so enstehenden Kopien wird die Vorsilbe "muster_" vor den Dateinamen gegeben.
# erforderlich ist das Paket ImageMagick (Version 6)
FONT="/usr/X11/lib/X11/fonts/truetype/VeraBd.ttf" # Die Schriftart die Verwendung finden soll
FONTSIZE=120 # Die Schriftgroesse in Pixel (Werte 32 bis 120)
COPYRIGHT="* Muster *" # der Wasserzeichentext
SIZE="800x800" # die Bildergroesse die entstehen soll
POS=Center # Position des Wasserzeichens (Mitte=Center Unten=South Oben=North)
KOMPR=98 # jpeg Kompressionsfaktor [ 85 (normal) bis 98 (sehr gut)]
# Infos zu den einzelnen Befehlen und weiteren Moeglichkeiten unter http://www.imagemagick.org/Usage
convert -font $FONT -pointsize $FONTSIZE -background black -fill white \
label:"$COPYRIGHT" -trim +repage -bordercolor black -border 20x10 tmp_mask1.png
convert tmp_mask1.png -blur 0x03 -shade 135x45 -normalize tmp_shade135.png
convert tmp_mask1.png -font $FONT -pointsize $FONTSIZE -fill white -gravity center \
-stroke white -strokewidth 3 -draw "text 0,0 \"$COPYRIGHT\"" tmp_mask2.png
convert tmp_shade135.png tmp_mask2.png +matte -compose CopyOpacity -composite mask3d.png
rm tmp_mask1.png tmp_mask2.png tmp_shade135.png
for BILD in *.jpg
do
composite mask3d.png "${BILD}" -resize $SIZE -gravity $POS -compose HardLight -quality $KOMPR muster_"$BILD"
done
rm mask3d.png
Der erste Teil des Scriptes ist dokumentiert. Hier werden die persönlichen Einstellungen gemacht. Aufgerufen wird das Script in dem Verzeichnis in dem die JPEG-Dateien liegen, von denen man die Muster braucht und zwar ohne irgend eine Option.
right|Musterbild erstellt mit Script
'tmp_mask1.png
''tmp_shade135.png
''tmp_mask2.png
''mask3d.png
''muster_
ALTERDATEINAME
' erstellt.
'Achtung
': es ist nicht ganz sicher seit welcher Version von ImageMagick dieses Script funktioniert es wurde getestet SuSE 10.1 und neuer.
Obwohl diese Methode hier auch auf normale Bilder anwendbar ist, stellen wir sie unter der Überschrift Unterwasserbilder, da hier der Effekt sehr ausgeprägt auftritt.
Unterwasserbilder zB. mit einer UW-Digitalkamera gemacht, sehen im Display der Kamera ja noch recht ansehlich aus. Sobald man sie aber über den Computer ansieht, erkennt man das ganze Übel. Jetzt kommen nicht nur Unschärfe und Bewegungsunschäfe und das [http://de.wikipedia.org/wiki/Plankton Plankton] im Blitzlicht so richtig zu Geltung, nein je größer wir uns das Bild anschauen, je mehr fällt auf, dass auf sehr vielen Bildern die Farben in Richtung hellblau, hellgrün oder helllila verwaschen aussehen, der Farbkontrast fehlt und überhaupt alles trübe aussieht. Es ist überhaupt kein Vergleich mit dem was man gesehen hat und fotografieren wollte. Die Kamera ist hier oftmals unschuldig, es ist vielmehr das Auge und Hirn das viel diffenzierter und genauer für jeden Augenblick neu Weißabgleich und Farbkorrekturen vornimmt, und uns so Farben und Kontraste vorgaugelt, die keine Kamera der Welt derzeit genauso reproduzieren kann. Bei vielen dieser Fotos kann man das mit einer digitalen Farbkorrektur jedoch einigermaßen hinbiegen, und so doch noch sehr schöne Fotos zusammenzaubern die in etwa dem entsprechen was das Auge gesehen hat. Früher habe ich das mit Gimp gemacht, das war jedoch sehr mühsam. Seit IM v6.2.6 ist die richtige Option dafür auch in ImageMagick enthalten.
convert img_0.jpg -channel 'RGBA' -contrast-stretch 1% -quality 98 korrektur_0.jpg
Mittels convert wird vom Bild 'img_0.jpg
' mittels [http://www.imagemagick.org/Usage/color/#contrast-stretch contrast-stretch] eine Farbspreizung über RGB und den Alpha-Kanal vorgenommen. Das Ergebniss wird mit niedriger Komprimierung in 'korrektur_0.jpg
' abgelegt.
Nicht alle Bilder lassen sich so direkt bearbeiten. Sind im Ausgangsbild sehr wenig unterschiedliche Farbbereiche vorhanden, dann wird diese Methode zu extrem. Es entstehen oftmals unnatürliche poppige Farben. Hier kann man folgendes versuchen, in dem mittels montage ein weiteres Bild mit breitem Farbbereich an das Bild angehängt wird und das so entstandene Doppelbild über contrast-stretch laufen läßt. Anschließend werden die Bilder wieder voneinander getrennt. Nach einigen Versuchen mit verschiedenen Bildern hat man oftmals dann doch noch ein einigermaßen brauchbares Bild.