Bilder mit der Unix-Shell komprimieren

So kriegen Sie jedes Bild "auf Befehl" klein...

Werbung
Ob sich so die Bilder auf der DVD wirklich komprimieren lassen ist fragwürdig... ;-)
Ob sich so die Bilder auf der DVD wirklich komprimieren lassen ist fragwürdig... ;-)

Nutzer von Content Management Systemen wie WordPress und Typo3, aber auch Webdesigner und Systemadmins kennen das Problem, mal eben schnell eine Bilddatei optimieren zu müssen.

Doch für eine solche Lappalie gleich Monster-Apps wie Photoshop und Co. anwerfen lohnt eigentlich nicht. Außerdem ist es umständlich, vor allem dann, wenn sich die Datei bereits auf dem Server befindet und das CMS zig Abwandlungen davon generiert hat.

Und wer als Webmaster schon einmal vor der Aufgabe stand, eine jahrelang vernachlässigte Website mit hunderten Fotos und Grafiken auf Vordermann bringen zu müssen, möchte sich das Dateischubsen vom und zum Server samt manueller Optimierung jedes einzelnen Bildes sicher auch gerne ersparen.

Eine Lösung wären Tools für die Kommandozeile, aber von Haus aus bringen Unix-/Linux-Systeme wie Ubuntu, Debian, OpenBSD und CentOS keine passenden Helfer für die Bildkomprimierung mit.

Im folgenden stellen wir daher zwei einfach zu nutzende und kostenlose Open Source – Utilities vor, die wir selbst im Alltag produktiv nutzen, um Bilddateien auf Diät zu setzen.

Tipp: Wie immer vor der Arbeit mit Dateien gilt… Sicherungskopien anfertigen!

Gängige Bildformate im Web: JPEG und PNG

JPEG (gesprochen ˈdʒeɪpɛɡ) ist wohl das populärste Format im Web. Die Bezeichnung geht dabei auf das Gremium Joint Photographic Experts Group zurück, das die JPEG-Norm 1992 entwickelt hat.

Der JPEG-Standard schlägt verschiedene Komprimierungs- und Kodierungsmethoden im Rahmen seiner Spezifikation vor und bietet so ein breites Anwendungsspektrum weit über das Internet hinaus.

PNG (Abkürzung für „Portable Network Graphics“) wurde als Nachfolger des GIF-Formats im Jahr 1996 offiziell vorgestellt und ist das derzeit am weitesten verbreitete verlustfreie Grafikformat im Netz.

Im Gegensatz zu GIF unterstützt PNG zwar keine Animationen, liefert jedoch meist bessere Kompressionsraten. Verwendet wird es häufig für Infografiken oder die Darstellung detailreicher Bildinhalte.

JPEGs optimieren mit jpegoptim

jpegoptim ist ein Tool zur Optimierung von JPEG-Dateien. Es bietet sowohl eine verlustfreie Komprimierung, indem es die verwendeten Huffman-Tabellen einer Optimierung unterzieht, sowie eine verlustbehaftete Komprimierung, bei welcher der Qualitätsfaktor angepasst werden kann.

Die Installation von jpegoptim kann problemlos über gängige Paketverwalter erfolgen (alternativ steht auf der Homepage des Autors auch der Quelltext zum Download parat); für Debian genügt der folgende Aufruf:

apt-get install jpegoptim

Das Tool kommt mit einer informativen man-Page, die alle Optionen erklärt:

man jpegoptim

Eine kürzere Zusammenfassung der Features liefert dieses Kommando:

jpegoptim -h

Für eine verlustfreie Komprimierung sind keine besonderen Angaben erforderlich; man ruft einfach jpegoptim zusammen mit dem gewünschten Dateinamen auf, fertig. Natürlich funktionieren auch die Shell-typischen Wildcards ? (ein Zeichen) und * (beliebig viele Zeichen).

Folgendes Beispiel holt das meiste aus JPG-Bildern heraus (verlustfreie Komprimierung):

jpegoptim -t --strip-all *.jpg

Die Option -t liefert am Ende des Durchlaufs eine zusammenfassende Statistik und –strip-all entfernt zusätzlich alle Marker und Kommentare (z.B. Exif, IPTC, ICC, XMP).

Je nach Ausgangsmaterial lässt sich das Datenvolumen gut und gerne halbieren, in Einzelfällen sogar um bis zu 90 %. Für unsere Tests nutzten wir verschiedene NEF-Bilder einer Nikon D3400, die zuvor mit der Nikon-eigenen App ViewNX-i in JPEGs der höchsten Qualitätsstufe konvertiert wurden.

Eigentümer und Dateiberechtigungen

In der von uns getesteten Version 1.4.4 steckt leider ein kleiner Bug: Die Eigentümer der optimierten Dateien werden auf den aktuellen Benutzer umgeschrieben.

Bei Bedarf muss also der vorherige Eigentümer mit chown wiederhergestellt werden (ansonsten könnten betroffene Bilder unter Umständen nicht mehr über das Web öffentlich erreichbar sein).

Link zum Tool: jpegoptim (über GitHub) 1]

PNGs optimieren mit OptiPNG

OptiPNG bietet neben der Optimierung von PNG-Dateien auch die Möglichkeit, Bilder der Formate BMP, GIF, PNM und TIFF nach PNG zu konvertieren sowie beschädigte PNG-Dateien zu reparieren.

Auch hier ist die Installation entweder mit gängigen Paketmanagement-Systemen oder manuell über die Source möglich. Für Debian beispielsweise:

apt-get install optipng

Das Tool kommt mit einer informativen man-Page, die alle Optionen erklärt:

man optipng

Eine kürzere Zusammenfassung der vorhandenen Features liefert dieses Kommando:

optipng -h

OptiPNG erlaubt eine sehr filigrane Einstellung der einzelnen Optimierungsmechanismen und stellt auf seiner Homepage eine detaillierte technische Beschreibung der Funktionsweise bereit.

In unseren Tests haben sich die folgenden Einstellungen bewährt:

optipng -v -o2 *.png

Die Option -v liefert für jede verarbeitete PNG-Datei statistische Informationen. Der Parameter -o2 setzt den Optimierungslevel auf Stufe 2. Die gängigen Wildcards ? (ein Zeichen) und * (beliebig viele Zeichen) werden unterstützt.

Höhere Optimierungslevel sind theoretisch möglich (von 0 bis 7), haben bei unseren Versuchen aber in keinem einzigen Fall zu einer kleineren Dateigröße geführt, die Rechenzeit pro Datei jedoch drastisch auf teilweise mehr als 30 Sekunden verlängert.

Das Einsparungspotential liegt zwischen 30 % und 80 %, mit Ausreißern nach unten wie nach oben. Ausgangsmaterial waren mit den Grafikprogrammen GIMP und Inkscape erstellte PNG-Dateien (Voreinstellungen wurden übernommen).

Link zum Tool: optipng (über SourceForge) 1]

Empfohlener Workflow für Content Management Systeme

Die meisten CMS wie WordPress erstellen beim Hochladen eines Bildes über die integrierte Medienverwaltung je nach Theme automatisch angepasste Versionen der Bilddatei, beispielsweise:

-rw-r--r-- 1 xxx xxx  110372 Dec 16 16:01 hallo-welt-1024x576.jpg
-rw-r--r-- 1 xxx xxx   89526 Dec 16 16:01 hallo-welt-1030x438.jpg
-rw-r--r-- 1 xxx xxx    9039 Dec 16 16:01 hallo-welt-150x150.jpg
-rw-r--r-- 1 xxx xxx   17469 Dec 16 16:01 hallo-welt-300x169.jpg
-rw-r--r-- 1 xxx xxx   24331 Dec 16 16:01 hallo-welt-326x245.jpg
-rw-r--r-- 1 xxx xxx   60317 Dec 16 16:01 hallo-welt-678x381.jpg
-rw-r--r-- 1 xxx xxx   70970 Dec 16 16:01 hallo-welt-678x509.jpg
-rw-r--r-- 1 xxx xxx   71326 Dec 16 16:01 hallo-welt-768x432.jpg
-rw-r--r-- 1 xxx xxx    2876 Dec 16 16:01 hallo-welt-80x60.jpg
-rw-r--r-- 1 xxx xxx 1854566 Dec 16 16:01 hallo-welt.jpg

Die nachträgliche Optimierung der zugeschnittenen Varianten ergibt bessere Kompressionsraten als die Optimierung des Originals vor dem Upload. Alle Varianten können einfach in einem Zug verarbeitet werden:

jpegoptim -t --strip-all hallo-welt*.jpg

Analog gilt dies natürlich auch für PNG-Dateien mit dem Tool OptiPNG.


1] Dies ist ein Link zu einem externen Anbieter.

Stand der Informationen: Dezember 2017
Wichtig: Bitte beachten Sie die Nutzungsbedingungen und rechtlichen Hinweise für diesen Beitrag!

Werbung