JPEG-Bilder mit Lepton komprimieren

Aus LinuxUser 10/2016

JPEG-Bilder mit Lepton komprimieren

© Janis Smits, 123RF

Da geht noch was!

Das Standard-Bildformat JPEG gilt seit Jahren als brauchbarer Kompromiss zwischen Qualität und Quantität. Große Bildbestände geraten dennoch schnell aus den Fugen. Lepton hilft dabei, Platz zu sparen.

Obwohl es längst ausgereiftere Bildformate gibt, wie beispielsweise Webp [1], gehört JPEG nach wie vor mit Abstand zu den verbreitesten. Egal, ob Smartphone, Kompaktkamera oder Profi-Equipment: Zumindest optional erzeugen sie alle Bilder dieses Formats. Entsprechend groß fällt die Flut infrage kommender Bilder aus, speziell auf den Servern von Filehostern beanspruchen sie beträchtlichen Speicherplatz.

Dieses Dilemma führte beim Cloud-Anbieter Dropbox [2] dazu, dass sich die Entwickler darüber Gedanken machten, wie sie hier effizient Platz sparen könnten. Heraus kam das neue Bildformat Lepton, das den Platzbedarf von JPEG-Bilder um bis zu 25 Prozent verkleinert. Es arbeitet dabei verlustfrei, das Bild bleibt nach dem Rekonvertieren bitgenau dasselbe (Abbildung 1). Dropbox hat nach eigenen Angaben das neue Format bereits auf 16 Milliarden Bilder angewandt und damit mehrere Petabyte Speicherplatz gespart. Die Dateien wandelt die Cloud transparent zurück ins Ursprungsformat, sobald jemand sie aufruft.

Abbildung 1: Lepton nimmt beim Konvertieren und Zurückverwandeln keinerlei Änderungen am Bild vor: Es bleibt bitgenau gleich.

Abbildung 1: Lepton nimmt beim Konvertieren und Zurückverwandeln keinerlei Änderungen am Bild vor: Es bleibt bitgenau gleich.

Anders als JPEG sieht Lepton nicht vor, das sichtbare Bild zu verkleinern, was bei JPEG häufig zu den bekannten Artefakten führt. Es ist vielmehr darauf ausgelegt, die für die Bildinformation benötigten Daten selbst durch den sogenannten Middle-out-Algorithmus zu verkleinern, eine arithmetische Codierung, die beispielsweise auch beim Videoformat VP8 zum Einsatz kommt. Eine detaillierte technische Erläuterung dazu liefert ein Blogpost von Dropbox [3].

Lepton installieren

Dropbox hat Lepton unter der Apache-2.0-Lizenz veröffentlicht, der Quellcode steht auf Github [4] zum Download bereit. Es steht also jedermann frei, das Programm nach Belieben zu verwenden. Für OpenSuse finden sich im Build Service [5] konfektionierte Pakete zur Installation, Nutzer anderer Distributionen kompilieren das Tool aus den Git-Quellen (Listing 1). Sie finden den Quellcode und die RPM-Dateien für OpenSuse auch auf der Heft-DVD im Verzeichnis LU/lepton/.

Listing 1

$ git clone https://github.com/dropbox/lepton
$ cd lepton
$ mkdir -p build
$ cd build
$ cmake ..
$ make -j8
$ sudo cp lepton /usr/bin/

Sie benötigen die Tools Git und Cmake. Unter Debian und dessen Derivaten laden Sie sie gegebenenfalls mit dem Befehl sudo apt-get install git cmake nach. Leptons README [6] schlägt noch einige andere Möglichkeiten vor, die beschriebene dürfte aber auf den meisten Systemen am problemlosesten funktionieren.

Im Einsatz

Die Syntax von Lepton gestaltet sich denkbar einfach. So konvertiert der Aufruf lepton bild.jpg das angegebene Bild ins Lepton-Format, behält den ursprünglichen Dateinamen bei und und tauscht lediglich die Endung .jpg gegen .lep aus. Um aus einer Lepton-Datei das originale JPEG zu extrahieren, genügt das Kommando lepton bild.lep (Abbildung 2). Das Tool orientiert sich am Dateityp, um das Bild in die jeweils andere Richtung umzuwandeln. Die Originaldatei bleibt dabei erhalten.

Abbildung 2: Um ein Bild umzuwandeln, genügt es, dessen Dateinamen anzugeben. Zusätzliche Schalter bietet Lepton nicht.

Abbildung 2: Um ein Bild umzuwandeln, genügt es, dessen Dateinamen anzugeben. Zusätzliche Schalter bietet Lepton nicht.

Existiert die Ausgabedatei bereits, überschreibt Lepton sie nicht, sondern legt eine neue an, die es mit einem Unterstrich (_) am Ende des Dateinamens versieht. Im Test zeigte sich, dass die Software Bilder nur bis zu einer Maximalgröße von etwa 17 MByte verarbeitet, danach bricht der Vorgang mit der Fehlermeldung OOM SHORT_READ ab.

Da JPEGs dieser Größe in der Praxis eher selten vorkommen, spielt das für den Normalanwender aber kaum eine Rolle. Generell arbeitet die Software im Multithreading-Betrieb: Sofern vorhanden, verwendet sie zum Konvertieren mehrere CPU-Kerne. Um das zu verhindern, ergänzen Sie den Befehl um den Schalter -singlethread, was den Vorgang auf den meisten Systemen erheblich verlangsamt, aber mehr Ressourcen frei lässt.

Um den Namen der Ausgabedatei zu variieren, ergänzen Sie den Aufruf entsprechend, beispielsweise lepton bild.lep bildkopie.jpg und umgekehrt. Lepton akzeptiert zum Verarbeiten ausschließlich Bilder im JPEG-Format. Die identifiziert es über deren Dateityp – welche Endung der Dateinamen aufweist, spielt dabei keine Rolle.

Allerdings arbeitet Lepton nicht nur als normales Konvertierungstool, sondern erlaubt auch den Betrieb eines TCP-Servers. Sie starten ihn mit dem Aufruf lepton -listen=2020. Er arbeitet quasi lediglich als Proxy-Server, der Daten entgegennimmt und – entsprechend verarbeitet – weiterleitet. Im Beispiel lauscht der Dienst auf Port 2020 nach eingehenden Verbindungsanfragen (Abbildung 3).

Abbildung 3: Optional arbeitet Lepton auch im Server-Modus und nimmt Bilder via TCP entgegen.

Abbildung 3: Optional arbeitet Lepton auch im Server-Modus und nimmt Bilder via TCP entgegen.

Mit dem Aufruf aus der ersten Zeile von Listing 2 schicken Sie JPEG-Bilder an den Server; ähnlich funktioniert es auch in die andere Richtung: Das Kommando aus der zweiten Zeile rekonvertiert die entsprechende Datei. Quelle und Ziel müssen sich in diesem Szenario auf dem gleichen Rechner befinden.

Listing 2

$ cat bild.jpg | netcat localhost 2020 > /ziel/bild.lep
$ netcat localhost 2020 < /ziel/bild.lep > bild.jpg

Benchmark und Vergleich

Mangels Viewer-Unterstützung eignet sich Lepton bislang in erster Linie zum verlustlosen Archivieren von JPEGs. Entsprechend muss es sich auch mit Konkurrenz aus diesem Lager messen lassen. Als Referenz diente im Test eine exakt 10 MByte große JPEG-Datei, die Tabelle “Lepton im Vergleich” zeigt die Ergebnisse verschiedener Komprimierungsprogramme.

Lepton im Vergleich

Aktion Lepton Bzip2 Zip Gzip Convert WebP(1)
Dateigröße komprimiert (MByte) 7,9 9,9 9,9 9,9 9,0
Zeit komprimieren (Sekunden) 5,0 2,5 0,4 0,5 30,8
Zeit dekomprimieren (Sekunden) 2,1 0,9 0,09 0,10 2,4
(1) WebP arbeitet verlustbehaftet.

Wie die Werte der Tabelle zeigen, gelang es bisher noch keinem herkömmlichen Komprimieralgorithmus, JPEGs ohne Qualitätsverlust nennenswert zu verkleinern. Hier kann Lepton punkten, bleibt in der Praxis aber weit von der mit 5 MByte/s angegebenen Encodierungsrate entfernt. In der Praxis erreichte das Tool gerade einmal 2 MByte/s.

In einem Rutsch

Der Einsatz von Lepton ist derzeit nur sinnvoll, wenn Sie sehr viele Dateien auf einmal damit komprimieren. Das Shell-Skript aus Listing 3 durchsucht rekursiv das Verzeichnis, aus dem es aufgerufen wurde, nach JPEG-Dateien, und konvertiert diese automatisch ins Lepton-Format. Kommentieren Sie Zeile 4 aus und entfernen das Kommentarzeichen vor Zeile 6, dann löscht das Skript die Ausgangs-JPEGs, statt sie ins Verzeichnis jpegs/ zu verschieben. Das Skript aus Listing 4 bewirkt genau das Gegenteil und wandelt die Lepton-Dateien wieder um ins JPEG-Format.

Listing 3

#!/bin/bash
for jpeg in `echo "$(file $(find ./ ) | grep JPEG | cut -f 1 -d ':')"`
  do
    /usr/bin/lepton "$jpeg"
### folgende Zeile auskommentieren, um JPEGs zu loeschen
    /usr/bin/mv "$jpeg" jpegs/
### Kommentarzeichen entfernen (#), um JPEGs zu loeschen
#   /usr/bin/rm -rf "$jpeg"
  done
exit 0

Listing 4

#!/bin/bash
for lep in `echo "$(find . -name "*.lep")"`
  do
    /usr/bin/lepton "$lep"
### folgende Zeile auskommentieren, um LEPs zu loeschen
    /usr/bin/mv "$lep" lep/
### Kommentarzeichen entfernen (#), um LEPs zu loeschen
#   /usr/bin/rm -rf "$lep"
  done
exit 0

In beiden Fällen empfiehlt es sich, die Skripte an die örtlichen Gegebenheiten anzupassen. Möchten Sie beispielsweise, dass diese die Bilder automatisch konvertieren, ersetzen Sie den Punkt hinter find durch den Pfad zu dem Verzeichnis, in dem sie sich befinden. Danach legen Sie einen entsprechenden Cron-Job an, der das Skript zu den vorgegebenen Zeiten startet.

Ordner überwachen

Möchten Sie sich selbst gar nicht mehr um das Konvertieren kümmern, helfen die Inotify-Tools [7] weiter. Sie dienen dazu, Dateien und Verzeichnisse auf Veränderungen hin zu überwachen, und stehen in den Repositories aller größeren Distributionen zur Installation bereit.

Prinzipiell funktioniert Inotify wie ein Daemon, der kontinuierlich überprüft, ob sich am zu überwachenden Objekt etwa ändert. So lassen sich Events triggern, wie etwa das Konvertieren eingehender Bilder mit Lepton. Das Skript aus Listing 5 gibt Ihnen eine Vorstellung davon, wie das funktioniert. Es handelt sich aber lediglich um ein Beispiel, das sich nur sehr bedingt und mit diversen Anpassungen versehen für den eigenen Einsatz eignet.

Listing 5

#!/bin/bash
inotifywait -mrq -e create -e moved_to --format %w%f /Pfad/zum/JPEG-Verzeichnis/ | while read FILE
FILE2=`echo "$FILE" | cut -d '/' -f 5 | | sed s/.jpg//g`
do
  /usr/bin/lepton "$FILE" /Pfad/zum/LEP-Verzeichnis/"$FILE2".lep
done
exit 0

Das LEP-Verzeichnis darf sich nicht im von Inotify überwachten Ordner befinden, da das Erzeugen eines neuen Bilds durch Lepton andernfalls eine Endlosschleife auslöst.

Fazit

Bislang lohnt sich der Einsatz von Lepton nur für Archivierungszwecke, bei denen es darum geht, große Mengen an JPEGs zu sichern. Die Platzersparnis von 20 bis 25 Prozent mag dem einen oder anderen nicht besonders viel erscheinen – bei der heutigen Masse an immer größer werdenden Bildern bedeutet das aber schnell mehrere GByte Plattenplatz.

Generell schlägt Lepton alle anderen Lösungen zum Komprimieren von JPEG-Bildern um Längen. Allerdings steht sich das Projekt auch selbst im Weg: Die mehr als dürftige Dokumentation erschwert einen sinnvollen Einsatz. Eine Implementierung des Formats in gängigen Bildbearbeitungsprogrammen oder Bildbetrachtern steht zwar noch aus, dürfte aber nicht mehr lang auf sich warten lassen. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 10/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben