Aufmacher

Zügiger Wechsel

ExactImage vs. ImageMagick

01.05.2008
Manchmal muss man einen ganzen Schwung Bilder am Stück konvertieren. Hier macht ExactImage dem traditionellen ImageMagick Konkurrenz.

ImageMagick fasst als Paket eine ganze Reihe von Programmen zusammen, die das Erzeugen, Editieren oder Zusammenfügen von Bilddateien auf der Kommandozeile ermöglichen [1]. Das gebräuchlichste dieser Programme, convert, bietet zahlreiche Funktionen und Parameter zum Umwandeln von Bildern [2].

Das Paket zählt zum Lieferumfang so gut wie jeder Linux-Distribution und lässt sich daher fast ausnahmslos über die jeweilige Paketveraltung einrichten. Unter Ubuntu befördern Sie ImageMagick 6.2.4 beispielsweise via sudo apt-get install imagemagick auf die Platte.

Der Herausforderer

Auf den Seiten der Berliner ExactCode GmbH findet sich der ImageMagick-Konkurrent ExactImage. Dessen Entwickler berichten auf der Projektwebseite [3], dass ein Grund für ihre Arbeit die geringe Geschwindigkeit von ImageMagick beim Konvertieren von Bilddateien gewesen sei – flotter ginge es mit ihrem Convert-Pendant econvert. Wir nahmen diese Aussage beim Wort und stellten die beiden Rivalen convert und econvert vor ein paar typische Konvertierungsaufgaben.

Bereits vor den ersten Prüfungen handelt sich ExactImage allerdings einen ersten Minuspunkt ein: Während der Klassiker ImageMagick mit praktisch allen gängigen Grafikformaten umgehen kann [4], beschränkt sich der Newcomer auf BMP, RAW, GIF, JPEG, JPEG2000, OpenEXR, PNG, PBM, TIFF, XPM, PS, EPS und PDF [5].

ExactImage installieren

Das aktuelle ExactImage 0.4.2 findet sich unter [6] als Quellcode-Archiv, Binärpakete gibt es nicht. Zur Übersetzung benötigen Sie die Entwicklungspakete ihrer Distribution, die Sie beispielsweise unter Ubuntu via sudo apt-get install build-essential nachrüsten. Damit Econvert später auch mit Vektorgraphiken klar kommt, greift es auf die Anti-Grain-Geometry-Software (kurz agg, [7]) zurück, deren Version 2.44 es aber bereits mitbringt. Nach dem Entpacken des Quelltextarchivs mit tar xvjf exact-image-0.4.2.tar.bz2 installiert der Dreisatz ./configure && make && sudo make install im Quellcodeverzeichnis ExactImage nach /usr/local/bin.

Der Ort des Duells

Econvert und Convert treten auf einem System unter Ubuntu 7.10 mit einem AMD Athlon XP 1900+ und 1,5 GByte Arbeitsspeicher gegen einander an. Die Testbildersammlung (Abbildung 1) stammt von einer Kodak-Digicam des Typs DX7630, die Ausgangsbilder weisen eine Auflösung von 2856 x 1904 Bildpunkten auf und sind zwischen 1,1 und 4,4 MByte groß. Das insgesamt 209 MByte Bildmaterial umfassende Testverzeichnis mit 96 JPEG-komprimierten Dateien liegt auf einer Festplatte, um die Messergebnisse nicht durch das langsamere Lesen von CD-ROM zu verfälschen.

Abbildung 1: Die Testdaten in bildlicher Darstellung: Diese hübschen Blumen und anderes Grünzeug gilt es zu pflücken.

Positives und negatives Pflanzenwachstum

Zu den typischen Konvertierungsarbeiten zählt es, Bilder für das Hochladen ins Web zu verkleinern. Convert bietet für diese Skalierung die Parameter -adaptive-resize, -resize oder -scale an. Die letzte Variante soll laut Dokumentation die schnellste sein, verzichtet sie doch auf jegliche interne Filteroperationen. Die Zielgröße kann man dabei absolut oder prozentual angeben. Demnach sorgt der Befehl convert -scale 50% EingabeAusgabe dafür, dass Breite und Höhe eines Ausgangsbildes auf die Hälfte zusammenschmelzen. convert -scale 800x600 EingabeAusgabe hingegen skaliert das Bild derart, dass entweder die Breite anschließend maximal 800 Pixel oder die Höhe maximal 600 Pixel beträgt.

Ein der Zielgröße nachgestelltes Caret (800x600^) hingegen garantiert dafür, dass das Ergebnis mindestens 800 Pixel Breite und wenigstens 600 Pixel Höhe aufweist – die Seitenverhältnisse bleiben hierbei erhalten. Möchten Sie das vermeiden und ein Bildformat von exakt 800 x 600 Pixeln erzwingen, hilft ein Ausrufezeichen (800x600!). Darüber hinaus legen Sie mit 800x600> beziehungsweise 800x600< als Geometrieangabe fest, dass Convert nur dann die Größe ändern soll, wenn das Ausgangsbild die gewünschte Zielgröße über- oder unterschreitet.

Der Herausforderer Econvert versteht nur die beiden Skalierungsparameter --scale und --box-scale. Bei ersterem versprechen die Entwickler, dass das Tool je nach Skalierungsfaktor intern den besseren Algorithmus nutzt. Bei --box-scale kommt dagegen intern stets ein so genannte Mittelwertfilter (engl.: Box-Filter) zum Einsatz. Die eher spärliche Dokumentation zu Econvert weist keine Möglichkeit zur Angabe absoluter Zielgrößen aus, Prozentangaben erfolgen als Hundertstel: Demnach reduziert econvert -i Eingabe --scale .25 -o Ausgabe die Größe auf ein Viertel.

Um die Vergleichbarkeit beim Test zu gewährleisten, konvertieren wir alle Bilder auf 25 Prozent der Ursprungsgröße. Die ImageMagick-Version von Ubuntu unterstützt -adaptive-resize nicht, sodass wir nur die anderen beiden Varianten und die beiden Konversionsmethoden von Econvert ins Duell einbezogen. Hierfür diente das in Listing 1 gezeigte Skript, bei dem wir für jeden Lauf jeweils nur einen Kandidaten durch Entfernen des # aktivierten.

Listing 1
#!/bin/bash
KUMULATIV=0
for BILD in *.jpg
  do
    START=`date +"%s.%N"`
#  convert -resize 25% "$BILD" "./convert_r/$BILD"
#  convert -scale 25% "$BILD" "./convert_s/$BILD"
#  econvert -i "$BILD" --scale .25 -o "./econvert_s/$BILD"
#  econvert -i "$BILD" --box-scale .25 -o "./econvert_bs/$BILD"
    STOP=$(date +"%s.%N")
    DIFFERENZ=$(echo $STOP-$START | bc)
    echo $DIFFERENZ >> EINZELZEITEN.TXT
    KUMULATIV=$(echo $KUMULATIV+$DIFFERENZ | bc)
    echo $KUMULATIV >> KUMULATIV.TXT
  done

Trotz der identischen Aufgabe unterscheiden sich die Ergebnisse doch deutlich hinsichtlich der Dateigrößen und der Verarbeitungszeit. Econvert erzeugte aus den 209 MByte Ausgangsmaterial lediglich 7,3 MByte skalierte Bilder, Convert dagegen 21 MByte. Für die Analyse des Zeitverbrauchs berechneten wir sowohl die Einzelzeiten (Abbildung 2) als auch die kumulierten Zeiten (Abbildung 3): Erste besagen, wie lange das jeweilige Skalieren pro Bild gedauert hat; letztere stellen die gesamte Verarbeitungszeit dar. Die Ergebnisse verdeutlichen, dass der Herausforderer hier deutlich die Nase vorn hat.

Abbildung 2: Econvert benötigt im Test je nach Skalierungsalgorithmus durchschnittlich zwischen 0,5 und 1,5 Sekunden je Bild – ImageMagick dagegen deutlich mehr.
Abbildung 3: Bei vielen Bildern summieren sich die Unterschiede deutlich auf.

Stroh zu Gold

Neben dem Skalieren von Bildern steht oft auch das Umwandeln in andere Formate auf der Aufgabenliste. Zwar unterstützen Convert deutlich mehr Dateiformate, immerhin kann aber auch Econvert mit den gängigsten aufwarten. Im zweiten Test sollen die beiden Kontrahenten Bilder vom JPEG- ins PNG-Format konvertieren. Da dies deutlich mehr Zeit erfordert als das Skalieren, nutzten wir hier die mit Econvert verkleinerten Bilder.

Der Befehl convert EingabeAusgabe beziehungsweise econvert -i Eingabe -o Ausgabe erledigt das Gewünschte. Dabei enden die Dateinamen bei Eingabe in unserem Fall auf .jpg, bei Ausgabe auf .png. Daraus erkennen sowohl Convert als auch Econvert selbständig das Zieldateiformat.

Die Messergebnisse in Abbildung 4 verdeutlichen erneut den Zeitvorteil des Herausforderers. Interessanterweise erzeugte Econvert in diesem Test minimal größere Dateien als Convert (55 MByte vs. 54 MByte).

Abbildung 4: Auch das Wandeln von JPEG nach PNG bewältigt Econvert zügiger als Convert.

Fazit

Zwar zeigen die Ergebnisse nur einen Ausschnitt aus den Funktionsspektren von Convert und Econvert – dennoch demonstrieren sie aber, dass der Herausforderer ExactImage in Sachen Geschwindigkeit deutlich die Nase vorn hat. Im Gegenzug wartet der Altmeister ImageMagick mit deutlich mehr Funktionen und unterstützten Dateiformaten auf.

Insofern lässt sich die Frage, wer das Duell gewonnen hat, nur teilweise beantworten. Falls der Funktionsumfang von Econvert jedoch Ihren Anforderungen genügt, können wir den Herausforderer jedenfalls bedenkenlos empfehlen.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare