libjpeg


aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Jpegtran)
Wechseln zu: Navigation, Suche
libjpeg
Logo von Version 9 des JPEG-Codecs der Independent JPEG Group (IJG)
Entwickler Independent JPEG Group
Erscheinungsjahr 7. Oktober 1991
Aktuelle Version 9a
(19. Januar 2014)
Betriebssystem plattformunabhängig
Programmier­sprache C
Kategorie Programmbibliothek
Lizenz BSD-artig (Freie Software)
ijg.org

libjpeg ist eine vielgenutzte freie Programmbibliothek mit Funktionen zum Umgang mit dem Bilddatenformat JPEG. Sie implementiert einen JPEG-Codec (Kodierung und Dekodierung) sowie verschiedene Hilfsfunktionen zum Umgang mit JPEG-Daten. Sie ist in C geschrieben und wird als freie Software auch im Quelltext unter den Bedingungen einer eigenen liberalen (BSD-artigen) Freie-Software-Lizenz verbreitet, die im Wesentlichen eine Namensnennung verlangt. Die ursprüngliche Variante wird von der Independent JPEG Group (IJG) herausgegeben und gepflegt. Mittlerweile gibt es mehrere weitgehend kompatible Abspaltungen mit zusätzlichen Eigenschaften wie beispielsweise höherer Kodiereffizienz.

Hilfsprogramme

Datei:Libjpeg utilities.svg
Übersicht der Hilfsprogramme

Die folgenden Hilfsprogramme werden mit libjpeg ausgeliefert:

cjpeg und djpeg
zur Konvertierung zwischen JPEG und einigen anderen gebräuchlichen Bilddateiformaten,
rdjpgcom und wrjpgcom
zum Einfügen und Auslesen von Textkommentaren in JPEG-Dateien und
jpegtran
ein Hilfsprogramm zum Transformieren bestehender JPEG-Dateien.

jpegtran

Datei:CropGUI GTK small.png
jpegtran transformiert JPEG-Daten ohne Neukodierung
(hier mit Oberfläche CropGUI)

Das Kommandozeilenprogramm jpegtran bietet jeweils mehrere Funktionen zum Umformatieren und Umkodieren der Repräsentation der bestehenden DCT-Koeffizienten, zur Transformation der eigentlichen Bilddaten und zum Verwerfen von Zusatzdaten in JPEG-Dateien. Die Transformationen bezüglich der Repräsentation der Koeffizienten umfassen

  • die Optimierung der Huffman-Bäume und
  • Konvertierung zwischen Huffman- und arithmetischer Kodierung in der Entropiekodierungs-Schicht,<ref name="jpegcrop"/><ref name="patent-fail"/><ref name="bug680385"/> sowie
  • die Konvertierung zwischen sequenziellem und progressivem JPEG.

Diese Transformationen sind jeweils vollständig verlustfrei und reversibel. Die Bilddatentransformationen umfassen

  • das Verwerfen von Farbkanälen (Konvertierung zu Graustufenbild),
  • Rotieren und Spiegeln in 90-Grad-Schritten,
  • Beschneiden entlang der Bildblockgrenzen (8×8 beziehungsweise 16×16 Pixel) und
  • Skalieren.<ref name="jpegtran"/>

Sie sind zumindest im Hinblick auf die letztlich erhaltenen Bilddatenanteile verlustfrei und reversibel. Eine Dekomprimierung und Neukomprimierung der Daten, durch die eine erneute Reduktion der Bildqualität und damit ein Generationsverlust aufträte, findet nicht statt.

Es gibt eine zugehörige Windows-Anwendung namens Jpegcrop, welche eine graphische Benutzeroberfläche zu jpegtran bietet. Für unixoide Systeme wie GNU/Linux gibt es die freie CropGUI mit ähnlicher Funktionalität.

Geschichte

Die JPEG-Implementierung der Independent JPEG Group (IJG) wurde erstmals am 7. Oktober 1991 veröffentlicht und seither beträchtlich weiterentwickelt. Die Entwicklung wurde anfangs namentlich hauptsächlich von Tom Lane getragen. Die quelloffene Implementierung von der IJG war eines der wichtigsten Pakete quelloffener Software für JPEG und auch ein Schlüssel für den Erfolg des Standards. Es wurde von vielen Firmen in einer breiten Palette von Produkten wie Bildbearbeitungsprogrammen oder Webbrowsern eingesetzt.<ref name="JPEG-homepage"/>

Für die am 24. September 1994 veröffentlichte Version 5 wurde die gesamte Codebasis neugeschrieben. Mit ihr wurden die Hilfsprogramme rdjpgcom und wrjpgcom zum Umgang mit eingebetteten Textkommentaren eingeführt. Die am 2. August 1995 veröffentlichte Version 6 kam mit Unterstützung für progressives JPEG und erstmals mit dem Hilfsprogramm jpegtran. Dieses wurde in Version 6b erweitert um die Funktionen zum Rotieren und Spiegeln sowie zur Farb-Reduktion auf Graustufen.

Aus Version 6b von libjpeg vom 27. März 1998 entwickelte Miyasaka Masaru den Zweig libjpeg/SIMD, der x86-SIMD-Optimierungen integrierte. Zu diesem leisteten die Projekte TigerVNC und VirtualGL 2009 wesentliche Beiträge. Auf dieser Basis entstand Anfang 2010 das libjpeg-turbo-Projekt.<ref name="libjpeg-turbo"/>

Die IJG brachte nach einem Führungswechsel nach 11 Jahren ohne Veröffentlichung neue libjpeg-Versionen (7 bis 9) heraus, die jeweils die Kompatibilität der Binärschnittstelle (ABI) zu vorhergehenden Versionen brachen.<ref name="compatibility-analysis"/> Die nach den 6er-Versionen in Aussicht gestellten Weiterentwicklungen blieben aus.<ref name="ijg-is-back"/> In Version 7 wurde Unterstützung für arithmetische Kodierung eingeführt, welche zuvor aus patentrechtlichen Gründen abgelehnt worden war, sowie außerdem die Beschneide-Funktion in jpegtran (-crop).<ref name="ijg-is-back"/> Versionen 8 und 9 dienten im Wesentlichen der Einführung von umstrittenen<ref name="SmartScale"/> inkompatiblen Formaterweiterungen. Diese gelten weithin als ineffektiv und bestehenden, standardisierten Lösungen gegenüber als unterlegen.<ref name="v9turbo"/><ref name="v8review"/> Ihre Standardisierung wurde nach Vorlage bei der ITU-T abgelehnt. Der ursprüngliche Organisator Tom Lane und andere sprechen von einem Bruch mit den früheren Zielen der IJG.

Am 4. März 2014 wurde die erste Version der dateigrößenoptimierenden Abspaltung mozjpeg veröffentlicht. Für diese überarbeitete Josh Aas von Mozilla Research das Perl-Skript jpegcrush vom x264-Hauptentwickler Loren Merritt und integrierte es in die Code-Basis von libjpeg-turbo.<ref name="heise.de"/> Am 10. Juli veröffentlichte Mozilla Version 2.0, die hauptsächlich Trellis-Quantisierung nachrüstet und nun auch baseline-JPEGs weiter optimieren kann. Facebook Inc. spendete daraufhin 60.000 US-Dollar für die Entwicklung der nächsten Version,<ref name="mozjpeg2"/> und CloudFlare beauftragte einen Entwickler mit der Weiterentwicklung.<ref name="CloudFlare"/>

Abspaltungen

Bekanntere Abspaltungen sind das Projekt libjpeg-turbo, das sein Produkt auf Ausführungsgeschwindigkeit optimiert, und mozjpeg, welches auf geringe Dateigrößen optimiert. Daneben existiert eine libjpeg von der ISO, die auf eine vollständige Implementierung aller JPEG-1-Standards zielt.<ref>https://github.com/thorfdbg/libjpeg</ref>

libjpeg-turbo

libjpeg-turbo
Logo von libjpeg-turbo
Entwickler libjpeg-turbo Project
Erscheinungsjahr 2010
Aktuelle Version 1.4.2
(21. September 2015<ref>Seite bei SourceForge</ref>)
libjpeg-turbo.org

libjpeg-turbo ist eine Abspaltung von libjpeg, die SIMD-Befehle zur Beschleunigung der Kodierung und Dekodierung von baseline-JPEG nutzt. Viele Projekte nutzen nun libjpeg-turbo anstatt von libjpeg, einschließlich populärer GNU/Linux-Distributionen (u. A. Debian, Ubuntu, Mageia, Fedora), Mozilla und Chrome.<ref name="turbo-software"/><ref name="Chromium"/><ref name="turbo 1.2"/> Manche Projekte haben sich außer den Leistungsvorteilen auch zur Erhaltung der Binärschnittstellen-Kompatibilität zur älteren Version 6b von libjpeg für libjpeg-turbo entschieden.<ref name="Fedora"/>

libjpeg-turbo kann so übersetzt werden, dass die Binärschnittstelle kompatibel zu Version 7 oder 8 von libjpeg ist, wobei nicht der volle Funktionsumfang neuerer IJG-Veröffentlichungen umgesetzt wird.<ref name="turboREADME"/> Das Projekt entschied sich gegen die Unterstützung der SmartScale-Formaterweiterung, wobei es darauf verwies, dass es keinen ITU-T-Standard darstellt und eigene Forschung anführte, die die Nützlichkeit der Funktion anzweifeln lässt. Weiterhin hat das libjpeg-turbo-Projekt entschieden, Version 9 von libjpeg nicht nachzuahmen, da dessen einzige neue Funktion nur das SmartScale-Format betrifft.<ref name="v9turbo"/> Daher werden die mit Version 8 und späteren Versionen von libjpeg erzeugte SmartScale-Dateien von libjpeg-turbo nicht korrekt dekomprimiert.

mozjpeg

libjpeg
mozjpeg
290px
mozcjpeg probiert verschiedene Aufteilungen des DCT-Koeffizienten-Spektrums
Basisdaten
Maintainer Josh Aas
Entwickler Mozilla Research
Erscheinungsjahr 4. März 2014
Aktuelle Version 3.1
(18. Mai 2015)
github.com/mozilla/mozjpeg

mozjpeg ist eine Abspaltung von libjpeg-turbo von Josh Aas und anderen von Mozilla Research. Es soll einer Beschleunigung der Ladezeiten von Webseiten dienen, indem durch eine Verbesserung der Kodiereffizienz bei gleichbleibender Bildqualität (etwa 10 Prozent) geringere Dateigrößen und damit verringerter Übertragungszeiten erreicht werden. Dazu soll ein höherer Rechenaufwand bei der hier typischerweise einmaligen Kodierung der Dateien dienen (Asymmetrie), wobei die Formatkompatibilität erhalten wird und auf Dekodierer-Seite keine Änderungen nötig werden. Konkret wird dies durch Optimierung der Huffman-Bäume, Einsatz progressiver Kodierung mit optimierter Aufteilung des DCT-Koeffizienten-Spektrums auf einzelne Durchläufe und Nutzung von Trellis-Quantisierung erreicht. Dazu sind die Voreinstellungen entsprechend aggressiv auf die Minimierung von Dateigrößen optimiert. mozjpeg baut neben libjpeg-turbo auf jpegcrush, einem Perl-Skript von Loren Merritt, auf.<ref name="heise.de"/><ref name="golem.de"/>

Weblinks

Commons Commons: libjpeg – Sammlung von Bildern, Videos und AudiodateienVorlage:Commonscat/Wartung/P 2 fehlt, P 1 ungleich Lemma

Quellen

<references> <ref name="jpegcrop">Jpegcrop Preferences and Options description</ref>

<ref name="patent-fail">Filmic Games >> The greatest failure of our patent system was...</ref>

<ref name="bug680385">680385 – Firefox does not show arithmetic coded jpegs</ref>

<ref name="jpegtran">New jpegtran features</ref>

<ref name="JPEG-homepage">JPEG homepage</ref>

<ref name="libjpeg-turbo">http://libjpeg-turbo.virtualgl.org/</ref>

<ref name="ijg-is-back">Mans Rullgard (Hardwarebug.org), 4. August 2009: IJG is back</ref>

<ref name="SmartScale">Tom Lane, 16. Januar 2013: jpeg-9, API/ABI compatibility, and the future role of this project</ref>

<ref name="turbo-software">Software That Uses or Provides libjpeg-turbo. 9. Februar 2012.</ref>

<ref name="Chromium">Issue 48789 – chromium – Use libjpeg-turbo instead of libjpeg. 14. April 2011.</ref>

<ref name="turbo 1.2">Bug 698519 – Update to libjpeg-turbo 1.2. 28. Februar 2012</ref>

<ref name="Fedora">libjpeg for F14. 9. Februar 2012.</ref>

<ref name="compatibility-analysis">libjpeg: API changes/compatibility. 9. Februar 2012</ref>

<ref name="turboREADME">libjpeg-turbo README file</ref>

<ref name="v9turbo">What About libjpeg v9?. libjpeg-turbo team. Abgerufen am 8. Februar 2013.</ref>

<ref name="v8review">Mans Rullgard (Hardwarebug.org), 1. Februar 2010: IJG swings again, and misses</ref>

<ref name="mozjpeg2">Sebastian Grüner, 16. Juli 2014: mozjpeg 2.0: Facebook unterstützt JPEG-Encoder von Mozilla</ref>

<ref name="CloudFlare">http://www.soeren-hentzschel.at/mozilla/2014/07/30/cloudflare-moechte-zu-mozillas-jpeg-encoder-beitragen/</ref>

<ref name="heise.de">André Kramer (heise.de-Newsticker), 14. Januar 2013: Mozilla-Encoder verbessert JPEG-Kompression</ref>

<ref name="golem.de">Andreas Donath (golem.de), 6. März 2014: Mozilla will JPEGs besser komprimieren</ref> </references>