Was ist JPEG?
JPEG ist ein breit unterstütztes Verfahren zur verlustbehafteten Kompression von Rasterfotos und anderen Halbtonbildern. Die Kompressionsqualität ist einstellbar, gängiges JPEG-Encoding bietet jedoch keine Transparenz.
So funktioniert JPEG
Das gängige JPEG-Verfahren teilt jede Farbkomponente in Blöcke der Größe 8×8, transformiert jeden Block mit einer diskreten Kosinustransformation, teilt die resultierenden Koeffizienten durch Werte aus einer Quantisierungstabelle, rundet die Ergebnisse auf Ganzzahlen und codiert sie mittels eines Entropiecodes. Bei der Quantisierung gehen Details verloren: Gröbere Tabellen verkleinern die Datei auf Kosten sichtbarer Fehler, besonders durch Unschärfe und Farbsäume um Text und scharfe Kanten. Encoder speichern außerdem häufig die beiden Chrominanzkomponenten mit reduzierter Auflösung, was eine zweite, separate Verlustquelle darstellt. Der JPEG-Standard definiert die komprimierten Daten und ihre Markersyntax, lässt den Farbraum und andere Anwendungsinformationen jedoch offen. Deshalb folgen Dateien meist einer Konvention wie JFIF oder Exif und können ein ICC-Profil sowie beschreibende Metadaten in Anwendungssegmenten enthalten.
Wichtige Fakten
- Ein Qualitätswert ist eine Encoder-Konvention und kein Bestandteil des JPEG-Standards: Der Standard legt keine Standard-Quantisierungstabellen fest. Encoder nach dem Vorbild von libjpeg bilden einen Wert von 0 bis 100 auf skalierte Tabellen ab. Derselbe Wert muss daher bei einem anderen Encoder nicht dasselbe Ergebnis liefern. Qualität 100 ist nicht verlustfrei. In libjpeg-turbo minimiert sie den Quantisierungsverlust, doch Chroma-Unterabtastung und Rundung verwerfen weiterhin Informationen. Oberhalb von etwa 95 wachsen die Dateien stark, bei geringem sichtbarem Gewinn.
- Baseline-JPEG ist das sequenzielle Verfahren mit 8 Bit und Huffman-Codierung, das jeder DCT-basierte Decoder unterstützen muss. Es codiert jede Komponente in einem einzigen Durchlauf. Progressives JPEG speichert dieselben quantisierten Koeffizienten über mehrere Durchläufe verteilt. Ein Decoder kann daher früh ein grobes Gesamtbild anzeigen und es verfeinern. Das endgültige Bild ist bei gleichen Einstellungen identisch mit dem sequenziellen, und die Datei ist etwa gleich groß. Zum Decodieren ist jedoch ein Koeffizientenpuffer für das gesamte Bild erforderlich.
- Jeder Zyklus aus Decodieren und erneutem Codieren quantisiert erneut, sodass sich Verluste über mehrere Speichervorgänge summieren. Wenn sich die Pixel ändern müssen, codieren Sie erneut vom Original statt von einer früheren Ausgabe. Werkzeuge, die mit den gespeicherten Koeffizienten arbeiten, vermeiden diesen Zyklus:
jpegtrankann zwischen Baseline und progressivem JPEG wechseln, ein Bild spiegeln oder in Schritten von 90° drehen, ohne seine Qualität zu verschlechtern. Dabei gelten zwei Einschränkungen. Solche Werkzeuge können die Qualität nicht ändern. Außerdem kann beim Spiegeln oder Drehen ein Randstreifen unverändert bleiben oder auf Wunsch abgeschnitten werden, wenn die betreffende Breite oder Höhe kein Vielfaches der iMCU-Größe (interleaved minimum coded unit) ist. Welche Dimension relevant ist, hängt von der Transformation ab. Diese Einheit hängt von der verwendeten Chroma-Unterabtastung ab und beträgt meist 8 oder 16 Pixel. Durch 8 teilbare Abmessungen reichen daher nicht immer aus. Metadaten sind ein separates Thema: Standardmäßig kopiertjpegtranKommentare und entfernt andere Metadaten wie Exif-Daten und ein ICC-Profil, sofern keine Beibehaltung vorgegeben wird. Kommentartext liegt in einem eigenen Markersegment und greift nicht in die Bilddaten ein. Auch das Hinzufügen oder Ersetzen von Kommentaren erfordert daher kein erneutes Encoding. - Der JPEG-Standard definiert auch einen verlustfreien Modus. Dieser verwendet jedoch ein separates Verfahren ohne DCT, das viele Decoder nicht lesen können. Wenn exakte Pixelwerte oder Transparenz erforderlich sind, verwenden Sie stattdessen ein Format wie PNG. JPEG hat keinen Alphakanal.
Wann JPEG relevant ist
Wählen Sie JPEG, wenn breite Kompatibilität und kleine Fotodateien wichtiger sind als der exakte Erhalt der Pixelwerte. Wiederholtes Encoding oder aggressive Kompression können Blockartefakte, Ringing und Detailverluste verursachen.
So hilft Transloadit bei JPEG
Der Robot /image/resize von Transloadit schreibt JPEG, wenn format auf jpg gesetzt ist. Er bietet den Parameter quality für die Kompressionsstufe, den Schalter progressive und strip zum Entfernen von Metadaten. JPEG-Ausgaben können keine Transparenz bewahren. Standardmäßig ersetzt der Robot den Hintergrund transparenter Bilder durch die Farbe aus background. Der Robot /image/optimize verkleinert vorhandene JPEG-Dateien und kann deren Metadaten beibehalten oder entfernen.
- Robot zur Größenänderung von Bildern: format, quality, progressive und background
- Robot zur Bildoptimierung
- Unterstützte Bildformate
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- CCITT-Empfehlung T.81 | ISO/IEC 10918-1: Digitale Kompression und Encoding von Halbton-Standbildern
- libjpeg-turbo usage.txt: cjpeg-Qualität, progressives JPEG und verlustfreie Transformationen mit jpegtran
- libjpeg-turbo: Verwendung der IJG-JPEG-Bibliothek (Farbräume, Marker, Speicherbedarf)
- MDN: Leitfaden zu Bilddateitypen und Formaten (JPEG)