ImageMagick nützliche Beispiele

Aus Linupedia.org
Version vom 1. Mai 2007, 15:26 Uhr von Robi (Diskussion | Beiträge) (Tricks und Tips EXIF:Orientation)
Wechseln zu: Navigation, Suche
Hinweis:

Bitte vor Änderungen an diesem Artikel die Hinweise auf den Diskussionsseite lesen .


Befehlsbeispiele mit convert

einfaches Formatumwandlung und Scalierung

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


Befehlsbeispiele mit mogrify

Befehlsbeispiele mit montage

Tricks und Tips für spezielle Aufgaben

automatische Bildorientierung mit ImageMagick

Wenn wir wild umeinander fotografieren machen wir nicht nur breitformatige Bilder sondern gelegentlich auch hochformatige Bilder. Einge teure Kameras registrieren das auch, oder Bildbearbeitungssoftware trägt das so 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 xv oder auch GIMP zeigen die Bilder aber nach wie vor im Breitformat. Zuständig für diese Automatik in einigen Programmen ist die 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 damit 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 JHead als Programm besser geeignet. Zum Anzeigen und Verarbeiten der Bilder entsprechend der richtigen Orientation gibt es in ImageMagick die Option -auto-orient

# display -resize 800x800 -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 hier



Musterbilder erstellen

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.

Musterbild erstellt mit Script
  • der erste convert Befehl erstellt eine Bildmaske aus dem Schriftzug Dateiname tmp_mask1.png
  • der zweite convert Befehl macht durch weichzeichnen Schatten und normalisieren daraus ein graues 3D-Schatten Bild Namens tmp_shade135.png
  • der dritte convert nimmt die erste Maske als Vorlage und schreibt die selbe Schrift nocheinmal aber etwas verbreitert darauf tmp_mask2.png
  • der vierte convert nimmt jetzt die 2 Maske und schneidet mit ihrer Hilfe das 3D Schattenbild aus, indem es den Rest unsichtbar macht.mask3d.png
  • die beiden Masken und das Schattenbild werden gelöscht, die brauchen wir nicht mehr.
  • in einer Schleife werden jetzt alle JPEG-Bilder einzeln mit mask3d.png überlagert und dabei ein verkleinertes Bild Namens muster_ALTERDATEINAME erstellt.
  • nach Abschluss der Schleife wird auch mask3d.png gelöscht.


Achtung: es ist nicht ganz sicher seit welcher Version von ImageMagick dieses Script funktioniert es wurde getestet SuSE 10.1 und neuer.


Farb und Kontrastverbesserung bei Unterwasserbildern

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 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 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.
links Orginalbild rechts nach Bearbeitung mit contrast-stretch