Einsatz in eigenen Programmen

In eigenen Programmen nutzen Sie ImageMagick einerseits über die Kommandozeilentools, wie es zahlreiche gängige Anwendungen tun, darunter auch Mediawiki (Abbildung 7). Alternativ basteln Sie sich einen Befehlsstring zusammen und führen ihn in Programmiersprachen wie C, PHP oder Perl mittels des Aufrufs system() aus. Die zweite Möglichkeit besteht darin, direkt die Bibliotheken zu verwenden: ImageMagick bieten umfangreiche APIs für viele Programmiersprachen.

Abbildung 7: Auch die beliebte Wiki-Software Mediawiki bedient sich der Fähigkeiten von ImageMagick.

Als erstes Beispiel soll ein PHP-Programm dienen. Ruft ein Nutzer Ihre Webseite mit vielen Grafiken über einen Webbrowser auf einem Mobilgerät ab, so verrät Ihnen das $_SERVER['USER_AGENT']. Um Datenvolumen zu sparen und die Kompatibilität zu erhöhen, liefern Sie diesem Nutzer die Grafiken idealerweise on-the-fly verkleinert aus. Sie benötigen dafür das Paket php5-imagick; Listing 8 zeigt, wie es funktioniert. Statt wie im Beispielprogramm auf eine fixe Breite von 200 Pixeln zu skalieren, könnten Sie den Besucher auch vorher eingeben lassen, wie stark die Webseite die Grafiken komprimieren soll.

Listing 8

<?php
// PNG-Bild ausgeben
header("Content-type: image/png");
// Beispielgrafik einlesen
$thumb=new Imagick("beispiel.png");
// auf 200px Breite skalieren
$thumb->thumbnailImage(200,0);
// Bild ausgeben
echo $thumb;
?>

Das kurze Perl-Beispiel aus Listing 9 verwendet ImageMagick beziehungsweise das Perl-Modul Image::Magic, um ein farbiges PNG-Bild einzulesen, dieses nach Schwarzweiß zu konvertieren und das Resultat als GIF-Datei zu speichern.

Listing 9

#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
my $image = Image::Magick->new;
$image->Read('farbig.png');
$image->Quantize(colorspace=>'gray');
$image->Write(filename=>'schwarzweiss.gif');

Und als Letztes noch ein kurzes Beispiel in C, diesmal unter Verwendung des ImageMagick-Forks GraphicsMagick (siehe Kasten "GraphicsMagick"). Um die Bibliotheken zu verwenden, bieten ImageMagick und GraphicsMagick sowohl ein Low-Level-Interface als auch eine einfachere High-Level-API namens MagickWand an. Listing 10 zeigt den Einsatz von MagickWand, um einen Aufruf convert beziehungsweise gm convert nachzubauen.

Listing 10

/* Konvertiert ein Eingabebild in ein
   Ausgabebild in einem anderen Bildformat.
   Aufruf: myconvert eingabebild ausgabebild
*/
#include <wand/magick_wand.h>
int main(int argc, char **argv) {
  /* MagickWand-Handle */
  MagickWand *mw;
  /* Initialisierung von GraphicsMagick */
  InitializeMagick(*argv);
  mw=NewMagickWand();
  /* Bild einlesen */
  MagickReadImage(mw, argv[1]);
  /* Bild in neuem Format schreiben */
  MagickWriteImage(mw, argv[2]);
  /* De-Initialisierung von GraphicsMagick */
  DestroyMagickWand(mw);
  DestroyMagick();
}

Im Gegensatz zu den unzähligen Optionen der Originalprogramme konvertiert das Beispiel aber tatsächlich nur zwischen verschiedenen Grafikformaten, also beispielsweise von GIF nach PNG. Sie übersetzen den Quelltext mit folgendem Kommando:

$ gcc myconvert.c -omyconvert $(GraphicsMagickWand-config --cppflags --ldflags --libs)

Die Schalter in Klammern sorgen hier dafür, dass der Compiler GCC die richtigen Flags und Bibliotheken verwendet.

GraphicsMagick

Bei GraphicsMagick [3] handelt es sich um einen 2002 entstandenen Fork von Imagemagick mit recht ähnlichen Fähigkeiten wie das Original. Allerdings gibt es bei GraphicsMagick im Gegensatz zu Imagemagick, das aus etlichen einzelnen Komponenten wie Convert, Mogrify oder Display besteht, lediglich den Generalbefehl gm. Ihn ergänzen Sie um die gewünschte Operation, beispielsweise gm convert oder gm mogrify. Die Tabelle "Programme und Funktionen" beschreibt die Schalter beider Komponenten.

Programme und Funktionen

ImageMagick GraphicsMagick Funktion
animate gm animate Bildserie anzeigen
gm batch mehrere Befehle als Skript ausführen
gm benchmark einen Befehl benchmarken
compare gm compare Bilder vergleichen
composite gm composite Bilder überlagern
conjure gm conjure Magick-Scripting-Language-Skript (XML) ausführen
convert gm convert Bilder konvertieren
display gm display Bild anzeigen
gm help Hilfe anzeigen
identify gm identify Bildinformationen anzeigen
import gm import Screenshot erstellen
mogrify gm mogrify Bild modifizieren
montage gm montage Bilder kombinieren
stream Bildausschnitt lesen
gm time Ausführungsdauer eines Befehls messen
gm version Version anzeigen

Weitere Programme

Neben den beiden Platzhirschen mit ihren umfangreichen Funktionen gibt es einige weitere Kommandozeilenprogramme, die mit ihren teils sehr speziellen Fähigkeiten durchaus ebenfalls eine Daseinsberechtigung haben. Die wichtigsten davon sind:

  • Exiftool [4], das EXIF-Metadaten modifiziert,
  • Optipng [5] und Pngcrush [6], die PNGs optimieren und verkleinern,
  • Jpegtran [7], das verlustfreie Modifikationen an JPEGs vornimmt, sowie
  • Steghide [8] und Outguess [9], die mittels Steganografie Informationen in Bildern verstecken.

Das Programm Exiftool gibt die EXIF-Metadaten von Bildern aus und modifiziert sie bei Bedarf. Diese Metadaten enthalten unter anderem den verwendeten Kameratyp, das Aufnahmedatum, unter Umständen auch die GPS-Koordinaten und die Seriennummer der Kamera. Um sich die Liste der möglichen Werte anzusehen, geben Sie exiftool -list ein. Mit exiftool bild.jpg geben Sie die enthaltenen Daten aus. exiftool -all= bild.jpg löscht alle unnötigen Metadaten – das erweist sich womöglich als sinnvoll, wenn Sie Bilder online stellen möchten. Alternativ fügen Sie auch weitere Daten hinzu. So schreibt das Kommando exiftool -comment="Text" bild.jpg einen Kommentar ins Bild.

Der Aufruf optipng bild.png optimiert PNGs, beispielsweise durch Reduzieren der Farbtiefe oder stärkere Kompression. Im Test verkleinerte das Tool die Dateigröße eines Bildes um knapp 70 Prozent. Mit Jpegtran modifizieren Sie JPEG-Dateien. Die Eingabe von jpegtran -optimize a.jpg >b.jpg optimiert ein Bild, jpegtran -rotate 90 a.jpg >b.jpg rotiert es um 90 Grad. Die Tools Steghide und Outguess schließlich dienen dazu, Informationen steganografisch in Bildern zu verbergen [10].

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Bildbearbeitung mit ImageMagick
    Wer nicht 1000 Urlaubsbilder von Hand skalieren, normieren, beschneiden oder mit Wasserzeichen versehen möchte, für den führt kein Weg an der Werkzeugsammlung ImageMagick vorbei.
  • Grafiken schnell passend gemacht
    Sei es für die Verwendung innerhalb von Web-Seiten oder andere Zwecke: Häufig müssen Grafiken von einem Format in ein anderes konvertiert und dabei noch in Größe und Qualität verändert werden. Mit convertaus dem ImageMagick-Paket machen Sie das schnell auf der Kommandozeile.
  • Profi-Funktionen von ImageMagick nutzen
    Vom Konvertieren von Negativen bis hin zum PDF fürs Fotobuch – mit ImageMagick und ein paar Zeilen Shell-Code meistern Sie jede Aufgaben ruck, zuck auf der Kommandozeile.
  • Sicherheitslücke in ImageMagick
    Die Bildbearbeitungssoftware ImageMagick liegt nicht nur vielen Linux-Distributionen bei, sie kommt auch auf Webservern zum Einsatz. Jetzt wurde eine dramatische Sicherheitslücke entdeckt. Ein Update von ImageMagick steht jedoch noch aus.
  • Zügiger Wechsel
    Manchmal muss man einen ganzen Schwung Bilder am Stück konvertieren. Hier macht ExactImage dem traditionellen ImageMagick Konkurrenz.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 0 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...
Tinte sparen bei neuem Drucker
Lars Schmitt, 30.11.2017 17:43, 2 Antworten
Hi Leute, ich habe mir Anfang diesen Monats einen Tintenstrahldrucker angeschafft, der auch su...
Für Linux programmieren
Alexander Kramer, 25.11.2017 08:47, 3 Antworten
Ich habe einen Zufallsgenerator entworfen und bereits in c++ programmiert. Ich möchte den Zufalls...