Was ist PJPEG?

PJPEG bezeichnet üblicherweise progressives JPEG, das ein Bild in mehreren Durchläufen speichert. Ein Decoder kann eine grobe Version des gesamten Bildes anzeigen, bevor spätere Durchläufe feinere Details ergänzen.

So funktioniert PJPEG

Ein progressives JPEG verteilt die Koeffizienteninformationen auf eine Folge von Durchläufen, statt jeden Bildbereich in einem einzigen Durchlauf vollständig zu codieren. Frühe Durchläufe legen die grobe Struktur des gesamten Bildes fest, spätere ergänzen Frequenzdetails oder erhöhen die Genauigkeit der Koeffizienten. Es bleibt Teil des herkömmlichen JPEG-Ökosystems und kann daher die üblichen Verarbeitungsketten für fotografische Bilddateien durchlaufen. Die sichtbare schrittweise Verfeinerung hängt jedoch sowohl vom Decoder als auch von der Anzeigesoftware ab.

Wichtige Fakten

  1. Progressives JPEG ist ein Modus des JPEG-Standards, kein separates Format: Dieselben quantisierten DCT-Koeffizienten werden auf mehrere Durchläufe verteilt, aufgeteilt durch spektrale Auswahl (Koeffizientenbänder), sukzessive Approximation (höchstwertige Bits zuerst) oder beides. Es handelt sich nicht um einen Stapel unabhängig codierter Thumbnails. Ein Parser kann den Modus am Frame-Header-Marker erkennen: FF C2 (SOF2) für eine Huffman-codierte progressive Datei, FF C0 (SOF0) für Baseline.
  2. Weder die Dateiendung noch der Medientyp kennzeichnet den Modus. Progressive Dateien behalten normalerweise .jpg oder .jpeg sowie image/jpeg; MDN führt auch .pjpeg und .pjp als JPEG-Dateiendungen auf. image/pjpeg ist nicht im IANA-Register verzeichnet. Diesen Medientyp gab die MIME-Erkennung von Internet Explorer aus Gründen der Abwärtskompatibilität für JPEG-Daten allgemein zurück. Ein Upload mit der Kennzeichnung image/pjpeg ist daher nicht zwangsläufig progressiv. Eine Positivliste, die solche älteren Clients berücksichtigt, muss ihn als JPEG behandeln und den Inhalt untersuchen.
  3. Eine progressive Datei zu decodieren und ihre Zwischendurchläufe anzuzeigen, sind zwei verschiedene Dinge. libjpeg-turbo liefert nur das fertige Bild zurück, sofern die Anwendung nicht den Buffered-Image-Modus nutzt. Laut Dokumentation verursacht jeder angezeigte Durchlauf ungefähr so viel Rechenaufwand wie das Decodieren eines vollständigen Bildes. Eine Datei mit mehreren Durchläufen benötigt außerdem einen Koeffizientenpuffer für das gesamte Bild, während eine Datei mit einem einzigen Durchlauf nur Puffer proportional zur Bildbreite benötigt. Die Werkzeuge von libjpeg-turbo bieten eine Begrenzung der Durchläufe, da manipulierte Dateien mit sehr vielen Durchläufen übermäßig viel CPU-Leistung beanspruchen können. Planen Sie den Speicherbedarf ein und begrenzen Sie die Anzahl der Durchläufe, wenn Sie nicht vertrauenswürdige Uploads decodieren.
  4. Bei gleicher Qualitätseinstellung ergibt eine progressive Datei laut Dokumentation von libjpeg-turbo nach dem Decodieren dasselbe fertige Bild wie eine sequenzielle Datei und ist etwa gleich groß, oft etwas kleiner. Wählen Sie sie für die schrittweise Anzeige, nicht wegen einer Größenersparnis. Der Standard verlangt nicht, dass Implementierungen jeden Modus bereitstellen. Einige eingebettete Decoder wie TJpgDec unterstützen nur Baseline.

Wann PJPEG relevant ist

Wählen Sie progressives JPEG, wenn eine frühe visuelle Rückmeldung beim Herunterladen einer großen Fotodatei hilfreich ist. Gängige Browser und Bildbibliotheken decodieren progressive Durchläufe zuverlässig. Beschränken Sie Kompatibilitätsprüfungen daher auf eingeschränkte Zielsysteme wie eingebettete Decoder oder Hardwaredecoder, die nur Baseline-JPEG implementieren.

So hilft Transloadit bei PJPEG

Der Robot /image/resize von Transloadit hat einen Parameter namens progressive, der die Ausgabe verschachtelt, damit Browser eine niedrig aufgelöste Version des gesamten Bildes anzeigen können, bevor die übrigen Daten eintreffen. Er ist standardmäßig ausgeschaltet. Die Bildformattabelle führt außerdem PJPEG neben JPG und JPEG als Formatnamen auf, den die ImageMagick-basierten Robots von Transloadit lesen und schreiben können.

Die Robot-Dokumentation nennt für progressive einen Aufschlag bei der Dateigröße und gibt nicht an, für welche Ausgabeformate die Option oder dieser Aufschlag gilt. Die Dokumentation von libjpeg-turbo beschreibt progressive JPEG-Dateien als etwa gleich groß wie sequenzielle, oft etwas kleiner. Messen Sie daher mit Ihren eigenen Bildern. Die Dokumentation beschreibt nicht, was die Wahl von PJPEG als Ausgabeformat gegenüber JPG ändert.

Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung

Quellen

Machen Sie aus Medienwissen eine funktionierende Pipeline

Verbinden Sie Uploads, Verarbeitung, KI, Storage und Auslieferung über eine deklarative API – um Encoding-Stack, Skalierung und ständig wechselnde Formate müssen Sie sich nicht selbst kümmern.

Transloadit kostenlos ausprobieren