Wenn es um den Einsatz von Linux geht, ist Softwarekompatibilität immer wieder ein sehr grosses Thema. Und oft wird Photoshop als Grund angegeben warum man Linux nicht verwenden kann.
Das Argument zieht immer weniger, da Adobe eine extrem umfangreiche Online-Version von Photoshop entwickelt hat die findet man unter: https://photoshop.adobe.com und ist definitiv einen Blick Wert.
Heute soll es aber nicht um Photoshop gehen. Für sehr viele alltägliche Aufgaben rund um Bildbearbeitungen braucht keinen so grosse Anwendung wie Photoshop. Es gibt seit dem Jahr 1987 das mächtige Kommandozeilenprogramm ImageMagick.
Als Web-Entwickler nutze ich dieses Programm auf dem Webserver beinahe dauernd. Immer dann, wenn ein Nutzer oder z.B. ein Redakteur ein Bild im CMS hochlädt, manipulieren wir das Bild mit ImageMagick auf vielfältige Weise.
Wir erstellen unterschiedliche Grössen vom Bild, konvertieren das Bild in andere Formate (ImageMagick beherrscht über 200 Bildformate) und nehmen noch einige Kompressionsoptimierungen vor, damit das Bild vom Webserver möglichst optimiert für Browser ausgespielt werden kann.
In diesem Beitrag möchte ich mich aber mehr mit den Möglichkeiten beschäftigen die ImageMagick für den Alltagseinsatz bietet. Ich werde hier aufzeigen wie wir…
- Bildinformationen lesen
- Bilder konvertieren
- Eine GIF-Animation aus mehreren Bildern erstellen
- Helligkeit und Kontrast verändern
- Bilder rotieren und spiegeln
- Ein Wasserzeichen in ein Bild einbetten kann
- Eine HTML-Bildergalerie erstellen kann
- Ein PDF-Fotobuch erstellen kann
ImageMagick kann noch viel mehr, aber auch jetzt wird dieser Artikel schon viel zu lange.
Vorbereitungen
Damit ihr hier mitarbeiten könnt. Müsst ihr ImageMagick erstmal installieren. ImageMagick sollte bei allen gängigen Linux-Distributionen in der Paketverwaltung vorlieren. Wichtig das ihr meinen Tutorials folgen könnt benötigt ihr min. ImageMagick in Version 7. Da von Version 6 auf 7 der Syntax komplett geändert wurde funktionieren meine Tutorials nicht (!) mit einer Version die älter als 7.x ist.
ImageMagick ist aber auch für Windows und MacOS verfügbar.
Ebenfalls habe ich ein ZIP-Archiv erstellt, bei dem ihr viele (von mir erstellten Beispielbilder findet) mit denen ich im Tutorial arbeite. Die könnt ihr euch gerne herunterladen und ebenfalls mit denen dieses Tutorial abarbeiten.
Bildinformationen auslesen
Beginnen wir mit was Einfachem. Bilder haben wie alle Dateien viele Meta-Informationen (z.B. Auflösung, Farbtiefe, etc) oft kann es nützlich sein diese Informationen lesen zu können. Im ZIP-Archiv gibt es ein Foto mit dem Namen «Bildinformation.jpeg» natürlich könnt ihr auch jedes andere Bild verwenden.
Um die Informationen von diesem Bild lesen zu können, navigieren wir im Terminal erstmal in den Ordner mit der Bilddatei, die wir lesen möchten. Danach geben wir im Terminal einfach folgenden Befehl ein und wir erhalten sehr ausführliche Meta-Informationen zum Bild.
Bilder konvertieren
Ein alltägliches Problem von dem ich in diversen Foren immer wieder lese. Ist es z.B. WebP-Bilder die man aus dem Internet heruntergeladen hat in ein PNG oder JPG Format zu verwandeln.
Mit ImageMagick ist das ein Kinderspiel. Im heruntergeladenen ZIP Archiv findet ihr eine Datei mit dem Namen «konvertieren.webp» aus der Datei machen wir nun ein JPG.
ImageMagick erkennt anhand der Dateiendung .jpg automatisch, dass wir ein JPG haben wollen, und konvertiert das Bild direkt um. Ihr könnt auch direkt noch die Kompressionsqualität beeinflussen.
Mit dem «quality» Parameter beeinflussen wir die Kompressionsqualität. 100 ist der höchste Wert, den wir eingeben wollen und erzeugt qualitativ die besten Bilder, allerdings haben die dann eine sehr grosse Dateigrösse. Je kleiner der Wert ist, umso geringer ist die Dateigrösse der JPG-Datei aber um so mehr Artefakte werden auf dem Bild sichtbar.
Für Webseiten (Ausser es handelt sich wirklich um eine Foto-Webseite) nehme ich in der Regel einen Wert zwischen 80 und 90.
Mehrere Bilder in einem Rutsch konvertieren
Angenommen wir hätten nun einen ganzen Ordner voller WebP Bilder, die wir mit einem Befehl in einem Rutsch konvertieren möchten, müssen wir den Befehl etwas anpassen.
Erst mit dem Terminal in den Ordner navigieren, wo die Bilder hinterlegt sind, danach kann folgender Befehl eingegeben werden:
Mit dem Parameter “+adjoin” stellen wir sicher, das ImageMagick jeweils ein neues JPG-Bild erstellt. Die Bilder werden beim Konvertieren durchnummeriert und heissen dann «bild-0.jpg, bild-1.jpg, bild-2.jpg, bild-3.jpg, usw.»
Eine GIF-Animation aus mehreren Bildern erstellen
Für mich persönlich sind die Beliebtheit von GIFs ein grosses Rätsel. Sie waren für mich zu Beginn der 2000er ein nützliches Mittel, um Bewegtbild auf einer Webseite abzubilden. Da man für Videos immer den Flash-Player und viel Web-Speicherplatz (der damals noch furchtbar teuer war) benötigte.
Seit Jahren kostet Web-Speicher kaum noch etwas und dank dem HTML5-Standard kann jeder Browser inline Videos abspielen, die Qualitativ viel besser, hochauflösender, etc sind als eine GIF-Animation je sein wird.
Dennoch gibt es heute kaum eine Messenger-APP auf dem Smartphone die nicht irgendwelche GIFs versenden kann. Ich schüttle da nur den Kopf, die Menschen geben tausende von Euros aus für Hochauflösende Smartphones mit 120 Herz Displays um danach super verpixelte Gifs, die gefühlt mit 5 Herz laufen abspielen zu lassen.
Ich muss es nicht verstehen aber ja GIFs sind beliebt. Und das Erstellen von GIFs ist mit ImageMagick sehr einfach.
In meinem ZIP-Archiv findet ihr einen Ordner mit dem Namen «GIF-Bilder» dort drin habe ich mehrere Bilder, aus denen wir nun ein animiertes GIF erstellen möchten.
Sobald wir im Ordner sind nutzen wir simpel den Befehl:
Damit erhalten wir die Datei «mein-gif.gif». Der Parameter Delay definiert in Hunderstelsekunden die Zeit wie lange ein Bild angezeigt werden soll bevor das nächste Bild geladen wird.
Und hier das Ergebnis:
Helligkeit und Kontrast verändern
Bilder können mal zu hell sein oder einen schlechten Kontrast haben. Auch diese Probleme kann man mi ImageMagick beheben. Hier werden wir mit mehreren Parametern arbeiten ich empfehle euch aber immer als erstes den Parameter «-normalize» zu probieren.
Mit «-normalize» arbeitet versucht eine «Automatik» das Bild im Kontrast anzupassen. Das funktioniert wie in Photoshop die «automatische Tonwertkorrektur» und liefert in der Regel sehr gute Ergebnisse.
Gut testen können wir das mit dem Bild «Kontrast.jpeg» wenn wir das mit Normlaize bearbeiten:
Mit dem Parameter «-brightness-contrast 20x10» kann man Helligkeit und Kontrast auch manuell steuern. Die erste Zahl gibt dabei die Helligkeitsänderung an die zweite den Kontrast.
Bilder rotieren und spiegeln
Gerade bei Selfies sind Bilder teilweise gespiegelt. Mit ImageMagick kann man das problemlos ändern. Folgende Parameter sind hier spannend:
- -flip : Spiegelt ein Bild horizontalt
- -flop : Spiegelt ein Bild vertikal
- -rotate ‘180’ : Dreht ein Bild um 180 Grad im Uhrzeigersinn. Den Wer 18’ kann man einfach anpassen. Negative Werte drehen das Bild gegen den Uhrzeigersinn.
Diese Parameter kann man problemlos kombinieren.
Ein Wasserzeichen in ein Bild einsetzen
Wenn man Bilder im Internet veröffentlichen will, kann es sinnvoll sein sie mit einem Wasserzeichen bestehend aus einem Logo oder Namen zu versehen. Wir haben zwei Möglichkeiten das zu tun.
Wir können unser Logo deckend auf das Bild draufsetzen oder mit einer Transparenz versehen. Alles, was wir dafür benötigen, finden wir wieder im ZIP-Archiv. Wir haben dort die Datei «wasserzeichen.png» (was einfach nur unser Linux Guides Forum Logo ist) und die Datei «Kirche.jpeg» was ein schönes Foto von der Kirche in Sarajevo ist.
Um nun das Wasserzeichen hinzuzufügen, machen wir folgendes:
Dieser Befehl erstellt eine neue Datei mit dem Namen «Kirche-mit-Wasserzeichen-1.jpg» in dem das Linux Guides Logo in der oberen linken Ecke ist. Mit dem Parameter «-geometry» positionieren wir das Wasserzeichen.
ImageMagick geht bei der Positionierung von der oberen linken Ecke aus. Mit +50+50 definieren wir, dass das Bild 50 Pixel vom oberen Rechten und vom linken Rand positioniert werden soll. Die Werte sind frei anpassbar.
Hier das Ergebnis:
Wenn man das Logo nun mit einer Transparenz versehen möchte, können wir den Befehl entsprechend ergänzen. z.B. so:
magick composite wasserzeichen.png -geometry +50+50 -watermark '25%' Kirche.jpeg Kirche-mit-Wasserzeichen-2.jpg
Mit dem Parameter «-watermark» definieren wir die Transparenz des Bildes. Mit 25% sagen wir das Logo eine Deckkraft von 25% haben soll. So sieht das Ergebnis mit transparentem Wasserzeichen aus. Hier das Ergebnis:
Eine HTML-Bildgalerie erstellen
Ihr wart im Urlaub und wollt ein paar grossartige Fotos mit euren Freunden teilen? Aber keine eigene Webseite programmieren?
Kein Problem. ImageMagick kann mit einem Befehl aus all euren Bilder eine kleine Webseite erstellen, die ihr problemlos auf jedes Webhosting hochladen könnt und die Bilder der ganzen Welt präsentiert.
Im ZIP-Archiv findet ihr den Ordner «HTML-Bildergalerie» navigiert mit dem Terminal in diesen Ordner. Im Ordner selbst befinden sich viele Bilder, aus denen wir nun mit einem Befehl eine Webseite erstellen.
magick montage -thumbnail 256x256 '*.jpeg' -background black +polaroid -background white webseite.html
Dieser Befehl erstellt eine “webseite.html» die man z.b. mit Firefox oder Browser eurer Wahl öffnen kann und eine schöne Galerie erstellt. Dank dem Parameter Polaroid sehen die Fotos etwas verspielt wie Polaroids aus, man kann den Parameter aber auch weglassen oder andere Parameter (Dokumentation ist da sehr ausführlich hinzufügen).
So sieht die Galerie im Browser aus:
Ein PDF-Fotobuch erstellen
Möchte man keine Webseite erstellen, sondern z.B. ein PDF-Fotobuch bietet ImageMagick hier ebenfalls eine Automatisierung an.
Damit das funktioniert muss man erst über die Linux-Paketverwaltung das Paket «ghostscript» installieren.
Wir können hier ebenfalls mit den Bildern im Ordner «HTML-Bildergalerie» arbeiten. Das Ziel soll es sein, dass wir pro Foto eine A4 Seite im PDF haben. Die Bilder sollen nicht bis an den Rand gehen, sondern einen 40 Pixel Rand haben.
Und die Bilder sollen anhand ihre Exif-Meta Informationen direkt automatisch richtig gedreht werden.
Wenn man im Terminal im Bilder Ordner ist, geht das Ganze mit diesem Befehl:
magick convert -auto-orient -resize 555x802 -gravity center -extent 595x842 '*.jpeg' fotobuch.pdf
Kurz eine Erklärung zu den einzelnen Parametern:
- -auto-orient : Dreht die Bilder anhand ihrer Meta-Informationen
- -resize 555x802 : skaliert jedes Foto 40Pixel kleiner als eine A4-Seite
- -gravity center : definiert das das Bild mittig auf der Seite platziert werden soll
- -extent 595842 : definiert die Seitengrösse (A4). Die Massen werden hier übrigens pin Punkt angegeben (bezogen auf 72DPI).
Fazit
ImageMagick erweist sich als eine vielseitige und leistungsstarke Lösung für die Bildbearbeitung unter Linux, die die Lücke schliesst, die oft durch die Abwesenheit von Adobe Photoshop in der Linux-Umgebung entsteht. Mit ImageMagick haben Benutzer ein leistungsstarkes Werkzeug zur Hand, das eine breite Palette von Funktionen bietet, von einfachen Aufgaben wie dem Lesen von Bildinformationen, Konvertieren von Bildformaten und Erstellen von GIF-Animationen bis hin zu fortgeschritteneren Funktionen wie der Anpassung von Helligkeit und Kontrast, dem Rotieren und Spiegeln von Bildern, dem Hinzufügen von Wasserzeichen und dem Erstellen von HTML-Bildergalerien und PDF-Fotobüchern.
Was besonders hervorzuheben ist, ist die Fähigkeit von ImageMagick, verschiedene Parameter und Funktionen zu kombinieren. Dies ermöglicht es den Benutzern, komplexe Bildbearbeitungsaufgaben effizient auszuführen, indem sie mehrere Operationen in einem einzigen Befehl zusammenführen. Die Anpassungsfähigkeit und die umfangreichen Möglichkeiten zur Automatisierung machen ImageMagick zu einem unverzichtbaren Werkzeug für Webentwickler und alle, die regelmässig mit Bildbearbeitungsaufgaben konfrontiert sind.
Insgesamt ist ImageMagick nicht nur eine praktikable Alternative zu grafischen Bildbearbeitungsprogrammen, sondern auch ein Beispiel dafür, wie leistungsfähig und flexibel Kommandozeilentools sein können, insbesondere in einer Linux-basierten Umgebung.