ImageMagick ist eine Sammlung von Tools und Bibliotheken, Es ist ein sehr mächtiges Tool, da es auf keine graphische Umgebung angewiesen ist. Es gibt APIs für C, C++, Perl, PHP und Python auf den verschiedensten Plattformen.
Alternativ dazu gibt es den Fork GraphicsMagick, der auf mehr Stabilität setzt.
Anwendungen
- Änderung der Größe
- Anwendung von Filtern
- Anzeigen von Bildern
- Erstellung von Animationen
- Erstellung von Graphiken
- Erzeugung von Thumbnails und Rahmen
- Konvertierung zu anderen Bildformaten
- Bilder vereinen
Links
Homepage: imagemagick.org
Lizenz: BSD Stil
Kommentar: Die PHP-Version ist über die Homepage nicht verfügbar.
Tips & Tricks
Anbei ein paar Anwendungen der Tools convert+animate, display, identify, import und mogrify. Weitere Beispiele auf http://www.imagemagick.org/Usage/
convert
Mit convert konvertiert man Bilder in ein anderes Format. Das Ziel-Format wird anhand der Endung erkannt.
- Konvertierung eines GIF in ein JPEG:
$ convert QuellDatei.gif ZielDatei.jpg $ convert foo.gif foo.jpg
- Verschieden Möglichkeiten, alle BMPs in PNGs zu konvertieren:
$ for i in *.bmp; do convert "$i" "${i%.bmp}.png" ; done $ for i in *.bmp; do convert $i `echo $i | sed -e 's/bmp$/png/'`; done $ for file in `ls`; do convert $file ${file/.bmp/.png}; done
- Nun alle PNGs direkt in das Unterverzeichnis ./png konvertieren lassen:
$ for i in *.bmp; do convert $i png/`echo $i | sed -e 's/bmp$/png/'`; done
- Man kann auch die Größe von Bildern (zum Beispiel für Miniaturansichten) ändern (auch nützlich in Shell-Scripten):
$ convert -size 120x120 GroßesBild.tiff -resize 120x120 NeueMiniAnsicht.png
- Hier werden alle *.jpg-Bilder (mit gleichem Seitenverhältnis) in ein kleineres Format gebracht, wobei die Zieldateien im Unterordner small (der existieren muss) landen:
$ for i in *.jpg ; do convert "$i" -resize 250x188 "small/$i" ; done
Wenn nur die Ziel-Breite vorgegeben wird: -resize 250x
Wenn nur die Ziel-Höhe festgelegt wird: -resize x180
- convert kann aus einem Foto eine Kohlezeichnung (charcoal) machen:
$ convert orginal_foto.jpg -charcoal 5 kohle_bild.jpg
- convert kann mehrere Bilder in einem Verzeichnis in eine Animation umwandeln.
$ convert -delay 10 *.jpg film.mng
- Abgespielt wird der Film mit dem Befehl
$ animate film.mng
display
Mit display Dateiname können Bilder in allen unterstützten Formaten (und das sind sehr viele) anzeigen lassen und bearbeiten.
- Anzeige einer Bilder-Serie:
$ display *.jpg
(SpaceTaste für vor, Backspace für zurück)
- Um sich eine Übersicht von Bildern in einem Verzeichnis zu schaffen ohne
alle Bilder laden zu müssen gibt es die Option vid (virtual directory). Mit [STRG-S] läst sich die Übersicht auch abspeichern.
$ display "vid:*.jpg"
Tastaturkürzel von display:
Strg-O
Bild Laden
Leertaste
Nächstes Bild
Strg-H
Vorheriges Bild
Strg-S
Speichern
Strg-Q
Beenden ohne Speichern
Strg-Z
Letzte Aktion Rückgängig
Strg-R
Letzte Aktion Wiederholen
%
Bildgröße ändern
h
Bild horizontal drehen
v
Bild vertikal drehen
L
Helligkeit ändern
C
Kontrast erhöhen
Z
Kontrast verringern
F2
Fleckenreduktion
F3
Prägungseffekt
F4
Rauschen reduzieren
<F5>
Rauschen hinzufügen
F6
Bild schärfen
F7
Bild weichzeichnen
F8
Schwellwerte setzen
<F9>
Kantenerkennung
F10
Pixel um zufällige Werte verschieben
F11
Bild beleuchten
F12
Kanten Aufhellen oder verdunkeln (3d Effekt)
identify
identify liest sogenannte Meta-Informationen aus den Bildern.
$ identify img_1701.jpg img_1701.jpg JPEG 1600x1200 DirectClass 761kb 0.000u 0:01
Ausgabeformat mit -format:
$ identify -format "%m width:%w height:%h %f\n" 2005-08-07_1803.jpg JPEG width:1600 height:1200 2005-08-07_1803.jpg
Weitere Parameter findet man hier oder sind im Manual beschrieben (man identify).
import
Mit import kann man screenshots machen. Der Befehl import beispiel.png verwandelt sich der Mauszeiger in ein Fadenkreuz, wenn man damit dann in ein Fenster klickt, macht import ein screenshot von dem Fenster und legt es im $HOME Verzeichnis des Benutzers ab.
- Importieren des fenster mit Rahmen (frame):
$ import -frame fenster_mit_deko.png
mogrify
Mit mogrify ändert man Bilder direkt ohne neue Dateien zu erzeugen.
- Hinzufügen eines schwarzen (0xFFFFFF) Rahmens (border) in einfacher (1x1) Stärke um eine Bild (bild.jpg):
$ mogrify -border 1x1 -bordercolor 0xFFFFFF bild.jpg
- Bild skalieren auf eine Geometrie von 640x480 Pixel:
$ mogrify -geometry 640x480 bild.jpg
- Skalieren mit Prozentangabe über '-resize' eines Bildes:
$ mogrify -resize 75% bild.jpg
- Skalieren mit Prozentangabe über '-resize' mehrerer Bilder:
$ mogrify -resize 75% *.jpg
- Bild um 90 Grad nach rechts bzw nach links drehen:
$ mogrify -rotate "90>" bild.jpg $ mogrify -rotate "90<" bild.jpg
Eigentlich bestimmen die spitzen Klammern nur Fälle, in denen das neue Bild größer oder kleiner ist als das alte - richtige Syntax
$ mogrify -rotate "90" bild.jpg #rechts drehen $ mogrify -rotate "-90" bild.jpg #links drehen
bitte einarbeiten!Die Anführungszeichen sind wichtig, da sonst das '>' als Umleitung von der Shell interpretiert wird und bild.jpg dabei gelöscht wird.
composite
Mit composite kann man ein Logo in ein Bild positionieren.
- ein Logo in die linke untere Ecke eines Bildes einfügen:
$ composite -gravity SouthEast logo.png QuellDatei.gif ZielDatei.jpg
Fragen
- Änderung des Weisswertes: Wie kann ich am besten den Weisswert ändern, so wie bei GIMP mit dem Werkzeug "Werte"? Habe mit "-white-threshold" experimentiert, aber das ist es wohl nicht?
Ich denke es ist unnötig da echo und sed auszuführen z.B. bei convert. Am besten nutzt man die Substitutionsfunktion der Shell. "${i%.bmp}png" bedeutet das das .bmp rausgelöscht wird und dafür das .png angehängt. Gerade bei vielen Dateien denke ich ist das schneller. --ThiloPfennig