Können wir die Größe eines JPEG-Bildes ändern, ohne es zu dekodieren und neu zu kodieren?

Können wir die Größe eines JPEG-Bildes ändern, ohne es zu dekodieren und neu zu kodieren?

Ich möchte ein JPEG-Bild im Format 640 x 480 in ein Bild im Format 320 x 240 konvertieren. Ich weiß, dass dies möglich ist, indem das JPEG-Bild in YCbCr-Rohmaterial dekodiert, skaliert und erneut in JPEG kodiert wird. Aber ist es mit der JPEG-Kodierung möglich, das Bild direkt zu skalieren, ohne es zu dekodieren?

Antwort1

Das können Sie, aber nur, wenn Ihr JPEG-Viewer das unterstütztSmartScaleJPEG-Erweiterung.jpgtrankann dies für Größen von N/8 tun, wobei N=1..16. Grundsätzlich wird die DCT-Blockgröße während der Neukomprimierung von 8x8 auf etwas anderes geändert (z. B. 4x4), was das Bild effektiv skaliert.

Hinweis: SmartScale wurde eingeführt inVersion 8der libjpeg-Bibliothek, wird aber von den Viewern nicht allgemein unterstützt.

Ein Dokument, in dem die Änderungen im Detail beschrieben werden, finden Sie hier:Entwicklung von JPEG.

BEARBEITEN:Es scheint, dass die meisten Viewer diese Bilder nicht wirklich darstellen können, da sie auf libjpeg-turbo basieren. Und libjpeg-turbohaben uns entschieden, diese Funktion nicht zu implementieren. Tatsächlich habe ich ziemlich viele Programme ausprobiert (unter Ubuntu 14.04 und Windows 8) und keines konnte das mit jpegtrans erstellte verkleinerte Bild anzeigen. Sogar Photoshop, IrfanView und GIMP haben versagt.

BEARBEITEN 2:Tatsächlich liefern Ubuntu und Fedora die libjpeg8-Bibliothek nicht einmal mit, sondern ersetzen sie vollständig durch die libjpeg-turbo-Version. Daher kann keines der Programme JPEG SmartScale-Dateien lesen, mit Ausnahme einiger Binärdateien, die statisch mit der ursprünglichen libjpeg8-Bibliothek verknüpft sind.

Antwort2

Die kurze Antwort lautet nein. Ein JPEG-Bild verwendet Komprimierung, was bedeutet, dass jedes Ausgabebyte von allen anderen abhängt. Wenn Sie die Anzahl der Bildbytes ändern, müssen Sie das Bild dekomprimieren und erneut komprimieren.

Durch die erneute Komprimierung kommt es zu einem Qualitätsverlust, da JPEG eine verlustbehaftete Komprimierung verwendet. Durch die Viertelung der Auflösung geht jedoch ohnehin Qualität verloren. Sie können die bestmögliche Qualität aus dem Bild mit niedriger Auflösung herausholen, indem Sie bei der erneuten Komprimierung die JPEG-Qualitätsstufe erhöhen. Dadurch erhöht sich jedoch natürlich die Dateigröße.

Wenn Sie viel mit Bildern arbeiten, sollten Sie am besten in einem verlustfreien Komprimierungsformat wie PNG arbeiten und die Bilder erst in JPEG konvertieren, wenn sie fertiggestellt sind – vorausgesetzt natürlich, Sie verfügen über den nötigen zusätzlichen Speicherplatz.

verwandte Informationen