Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Libjpeg
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Free software library for handling the JPEG image format}} {{lowercase title|title=libjpeg}} {{Infobox software | name = libjpeg | logo = [[File:Logo JPEG 9.svg|200px|Logo IJG libjpeg v9]] | screenshot = | caption = | author = [[Tom Lane (computer scientist)|Tom Lane]] | developer = {{Plainlist| * Independent JPEG Group * Guido Vollbeding<ref>{{cite web|url=https://jpegclub.org/reference/new-version-of-libjpeg-ver-9d-of-independent-jpeg-group-available-now/|title=New Version of libjpeg (Ver. 9d) of Independent JPEG Group available now|last=Göhler|first=Lars|date=April 29, 2020|website=JPEG Reference|publisher=Independent JPEG Group|access-date=2021-01-25}}</ref><ref>{{cite mailing list|url=https://sourceforge.net/p/libjpeg/mailman/message/37031076/|title=Re: [Libjpeg-devel-6x] 4 Integer Overflow Errors in libjpeg-9c|last=Friesenhahn|first=Bob|date=June 6, 2020|mailing-list=libjpeg-devel-6x|access-date=2021-01-25|quote=The only concern was that Guido Vollbeding is not likely subscribed to this list and IJG JPEG is essentially developed by one person.}}</ref> }} | released = {{start date and age|1991|10|7}} | latest release version = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}} | latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}|df=yes}} | programming language = [[C (programming language)|C]] | operating_system = [[Cross-platform]] | genre = [[library (computer science)|library]] | license = Custom [[BSD licenses|BSD]]-like ([[free software]]) | website = {{Plainlist| * {{URL|ijg.org}} * {{URL|jpegclub.org/reference|jpegclub.org}} }} | repo = {{URL|https://www.ijg.org/files/}} }} '''libjpeg''' is a free [[library (computer science)|library]] with [[function (computer science)|functions]] for handling the [[JPEG]] image data format. It implements a JPEG [[codec]] (encoding and decoding) alongside various utilities for handling JPEG data. It is written in [[C (programming language)|C]] and distributed as [[free software]] together with its [[source code]] under the terms of a custom [[permissive free software licence|permissive]] ([[BSD licenses|BSD]]-like) free software license, which demands [[attribution (copyright)|attribution]]. The original variant is maintained and published by the Independent JPEG Group (IJG). Meanwhile, there are several [[fork (software development)|forks]] with additional features. JPEG [[JFIF]] images are widely used on the Web. The amount of compression can be adjusted to achieve the desired trade-off between file size and visual quality.<ref>[https://www.w3.org/Graphics/JPEG/ JPEG JFIF]</ref> ==Utilities== The following utility programs are shipped together with libjpeg: ; cjpeg and djpeg: for performing conversions between JPEG and some other popular image file formats. ; rdjpgcom and wrjpgcom: for inserting and extracting textual comments in JPEG files. ; jpegtran: for transformation of existing JPEG files. ===jpegtran=== [[File:CropGUI GTK small.png|thumb|jpegtran transforms JPEG data without reencoding<br />(here with user interface ''CropGUI'')]] The [[command-line interface|command-line]] program ''jpegtran'' provides several features for reformatting and recoding the representation of the [[discrete cosine transform|DCT]] coefficients, for transformation of actual image data and for discarding auxiliary data in JPEG files, respectively. The transformations regarding the representation of the coefficients comprise: * optimisation of the [[Huffman coding]] layer of a JPEG file to increase compression, * conversion between progressive and sequential JPEG formats, * conversion between Huffman and [[arithmetic coding]] in the [[entropy coding]] layer.<ref name="jpegcrop"/><ref name="patent-fail"/><ref name="bug680385"/> These transformations are each completely lossless and reversible. The transformations on the image data comprise: * eliminate non-standard application-specific data inserted by some image programs, * perform certain transformations on a file, such as: ** discarding of colour channels (conversion to greyscale), ** rotating and [[flipped image|flipping]] in steps of 90 degrees, ** [[Image cropping|cropping]] or joining at image block borders (every 8×8 or 16×16 pixels), ** rescaling.<ref name="jpegtran"/> These are [[lossless]] and reversible only regarding the image data that is kept. Reencoding with repeated lossy quantisation of the image data ([[generation loss]]) does not take place. ==History== The JPEG implementation of the Independent JPEG Group (IJG) was first publicly released on 7 October 1991 and has been considerably developed since that time. The development was initially mainly done by [[Tom Lane (computer scientist)|Tom Lane]]. The [[open-source software|open-source]] implementation of the IJG was one of the major open-source packages and was key to the success of the JPEG standard. Many companies incorporated it into a variety of products such as image editors and web browsers.<ref name="JPEG-homepage"/> For version 5, which was released on September 24, 1994, the whole code base was rewritten. It introduced the utility programs ''rdjpgcom'' and ''wrjpgcom'' for handling embedded text comments. The version 6 from 2 August 1995 came with support for progressive JPEG and for the first time with the utility program ''jpegtran''. This utility was extended with features to rotate and flip images and grayscale reduction in version 6b. === libjpeg-turbo and descendants === From version 6b of libjpeg of 27 March 1998, Miyasaka Masaru forked a branch named ''libjpeg/SIMD'', which included x86 SIMD optimisations. It got substantial contributions from the TigerVNC and the VirtualGL projects in 2009. On that basis the libjpeg-turbo project was created in 2010.<ref name="libjpeg-turbo"/> On 4 March 2014, the first version of the filesize-optimising fork ''MozJPEG'' was published. For this version Josh Aas from Mozilla Research reworked the [[Perl]] script ''jpegcrush'' from [[x264]]'s main developer Loren Merritt and integrated it into the code base of libjpeg-turbo.<ref name="heise.de"/> On 10 July 2014, Mozilla released version 2.0, which mainly added trellis quantisation and is now able to reduce the size of baseline JPEGs also. [[Facebook]], Inc. donated {{val|60000|u=dollars}} for the development of the next version,<ref name="MozJPEG2"/> and [[CloudFlare]] assigned a developer for the improvement of MozJPEG.<ref name="CloudFlare"/> In 2019, libjpeg-turbo became the ISO and ITU endorsed reference implementation for the JPEG format.<ref name=refimpl/> In April 2024, Google introduced ''Jpegli'', a new JPEG coding library that offers enhanced capabilities and a 35% compression ratio improvement at high quality compression settings, while the coding speed is comparable with MozJPEG.<ref>{{cite web |title=Introducing Jpegli: A New JPEG Coding Library |url=https://opensource.googleblog.com/2024/04/introducing-jpegli-new-jpeg-coding-library.html |publisher=Google Open Source Blog |access-date=4 April 2024 |archive-url=https://web.archive.org/web/20240403181607/https://opensource.googleblog.com/2024/04/introducing-jpegli-new-jpeg-coding-library.html |archive-date=3 April 2024 |date=3 April 2024}}</ref> === Change in IJG leadership === After 11 years and a change in leadership, the IJG under Guido Vollbeding released new versions of libjpeg (7 through 9), of which each broke ABI compatibility with previous versions.<ref name="compatibility-analysis"/> The changes that were held in prospect after the 6x series were not delivered.<ref name="ijg-is-back"/> In version 7, support for [[arithmetic coding]] was introduced, which earlier has been rejected because of the [[software patent|patent]] situation, as well as the crop feature in jpegtran (<code>-crop</code>).<ref name="ijg-is-back"/> Versions 8 and 9 served basically for the introduction of controversial<ref name=TomSmartScale/> incompatible format extensions. These are widely regarded as ineffective and inferior to existing, standardised solutions.<ref name="v8review"/> Their standardisation was rejected after submission to the [[ITU-T]]. The original organiser Tom Lane and others criticize these changes as a break from the goals of the IJG.<ref name=TomSmartScale/> ==Versions== {| class="wikitable plainlist" |- ! Version ! Released ! New features |- ! colspan=4 style="text-align: center;" | ITU T.81 JPEG Compatible |- | {{Version |o |1}} | 1991 | *First release *Baseline or optimized JPEG *GIF or PPM output |- | {{Version |o |2}} | 1991 | *Internal improvements *More input/output formats |- | {{Version |o |3}} | 1992 | Internal and image quality improvements |- | {{Version |o |4}} | 1992 | Internal and speed improvements |- | {{Version |o |4a}} | 1993-02-18 | |- | {{Version |o |5}} | 1994-09-24 | Internal improvements and revised API |- | {{Version |o |5a}} | 1994-12-07 | |- | {{Version |o |5b}} | 1995-03-15 | |- | {{Version |o |6}} | 1995-08-02 | *Progressive JPEG *jpegtran (convert between baseline and progressive) |- | {{Version |o |6a}} | 1996-02-07 | |- | {{Version |co |6b}} | 1998-03-27 | *jpegtran extended to lossless rotate (used by '''libjpeg-turbo''', '''MozJPEG''' and '''Jpegli''') |- | {{Version |o |7}} | 2009-06-27 | *jpegtran extended to lossless crop *T.851 Arithmetic Coding<ref>{{cite web |title=ITU-T T.81 (JPEG-1)-based still-image coding using an alternative arithmetic coder |date=September 2009 |url=https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-T.851-200509-I!!PDF-E&type=items |type=pdf }}</ref> *Scaled DCT<ref name="TurboSmartScale"/> |- ! colspan=4 style="text-align: center;" | Proprietary non-compatible extensions |- | {{Version |o |8}} | 2010-01-10 | *SmartScale extension (ITU rejected)<ref>[http://jpegclub.org/temp/ITU-T-JPEG-Plus-Proposal_R3.doc ITU-T JPEG-Plus Proposal R3]</ref><ref>[http://jpegclub.org/temp/Evolution_of_JPEG.doc Evolution of JPEG]</ref> *jpegtran extended to use SmartScale *Internal fixes |- | {{Version |o |8a}} | 2010-02-28 | RGBA |- | {{Version |o |8b}} | 2010-05-16 | Memory corruption & build fixes |- | {{Version |o |8c}} | 2011-01-16 | Option for selecting DCT block size (SmartScale) |- | {{Version |o |8d}} | 2012-01-15 | RGB JPEG (no color transform to YCbCr) |- | {{Version |o |9}} | 2013-01-13 | *[[YCoCg]] color *Lossless compression (1x1 DCT)<ref>[http://jpegclub.org/temp/JPEG_9_Lossless_Coding.doc JPEG 9 Lossless Coding]</ref> |- | {{Version |o |9a}} | 2014-01-19 | * "[[JFIF]]v2" [[scRGB]] Wide color gamut (standard unknown) *8-12 bit color (standardJPEG) |- | {{Version |o |9b}} | 2016-01-17 |Computation improvements |- | {{Version |o |9c}} | 2018-01-14 |{{code|jpegtran -wipe}} |- | {{Version |o |9d}} | 2020-01-12 | *Code cleanup *Huffman optimization *x64 support (MSVC) *{{code|jpegtran -drop}} |- | {{Version |o |9e}} | 2022-01-16 |ARM and ARM64 support (MSVC) |- | {{Version |c |9f}} | 2024-01-14 | *ARM64EC support (MSVC) *Xcode build system *C++Builder/RAD Studio build system |} {{Version |l |show=111100}} ==Forks== Well-known forks are libjpeg-turbo, which optimises for speed of execution, and MozJPEG, which optimises for smaller file sizes. There is also a [[#ISO libjpeg|similarly named library]] from the [[International Organization for Standardization|ISO]], which aims to be a complete implementation of JPEG, [[JPEG XT]] and [[JPEG LS]] standards.<ref>{{Cite web|url=https://github.com/thorfdbg/libjpeg|title = Libjpeg|website = [[GitHub]]|date = 6 October 2021}}</ref> ===libjpeg-turbo=== <!-- Q28515827 --> {{Infobox software | name = libjpeg-turbo | logo = [[File:libjpeg-turbo logotype.svg|167px|Logo libjpeg-turbo]] | screenshot = | caption = | developer = libjpeg-turbo Project | released = {{start date and age|2010|11|19}} | latest release version = {{wikidata|property|preferred|references|edit|Q28515827|P348|P548=Q2804309}} | latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|Q28515827|P348|P548=Q2804309|P577}}|df=yes}} | website = {{URL|libjpeg-turbo.org}} | repo = {{URL|github.com/libjpeg-turbo}} }} libjpeg-turbo is a [[Fork (software development)|fork]] of libjpeg that uses [[SIMD]] [[Instruction set|instructions]] to accelerate baseline JPEG encoding and decoding. Many projects are now using libjpeg-turbo instead of libjpeg, including popular Linux distributions ([[Fedora (operating system)|Fedora]], [[Debian]], [[Mageia]], [[openSUSE]], ...), [[Mozilla]], and [[Google Chrome|Chrome]].<ref name="turbo-software"/><ref name="Chromium"/><ref name="turbo 1.2"/> Apart from performance, some projects have chosen to use libjpeg-turbo because it allows them to retain backward [[Application binary interface|ABI]] compatibility with the older libjpeg v6b release.<ref name="Fedora"/> libjpeg v7, v8 and v9 broke ABI compatibility with prior releases.<ref name="compatibility-analysis"/> libjpeg-turbo implements the standard-compliant arithmetic coding and lossless crop features seen in libjpeg v7. It can also be configured to be compatible with the libjpeg v7 or v8 ABI, but it does implement DCT scaling and the proprietary SmartScale, which builds on DCT scaling.<ref name="turboREADME"/> libjpeg-turbo chooses not to support SmartScale, because it is not an [[ITU-T]] standard and because their own research finds it (and DCT scaling) ineffective.<ref name="TurboSmartScale">{{cite web |title=libjpeg-turbo {{!}} About / A Study on the Usefulness of DCT Scaling and SmartScale |url=https://libjpeg-turbo.org/About/SmartScale |website=libjpeg-turbo.org}}</ref> By extension, since the only major new feature in libjpeg v9 is specific to the SmartScale format, the libjpeg-turbo Project has chosen to forgo emulating libjpeg v9.{{cn|date=February 2025}} Since 2019, libjpeg-turbo is one of the two JPEG reference implementations, available as ISO/IEC 10918-7 and ITU-T T.873.<ref name=refimpl>{{cite web |title=ISO/IEC 10918-7:2019 Information technology — Digital compression and coding of continuous-tone still images — Part 7: Reference software |url=https://www.iso.org/standard/75845.html |website=ISO |language=en}}{{cite web |title=T.873 (05/19): Information technology - Digital compression and coding of continuous-tone still images: Reference software |url=https://www.itu.int/rec/T-REC-T.873-201905-S/en |website=www.itu.int}}</ref> The other reference implementation is ISO libjpeg which also includes support for JPEG XT and JPEG LS.{{cn|date=February 2025}} === MozJPEG === {{Infobox software | name = MozJPEG | logo = [[File:mozjpeg logotype.svg|120px|MozJPEG]] | screenshot = cjpeg-screenshot.png | caption = MozJPEG tries several partitionings of the spectrum of DCT coefficients | developer = [[Mozilla Research]] | released = {{start date and age|2014|3|4}} | latest_release_version = 4.1.5 | latest_release_date = {{Release date and age|2023|10|12}}<ref>{{cite web | url = https://github.com/mozilla/mozjpeg/tags | title = Releases · mozilla/mozjpeg | website = github.com | access-date = 2022-08-14 }}</ref> | website = {{url|https://github.com/mozilla/mozjpeg}} }} MozJPEG is a fork from libjpeg-turbo done by Josh Aas and others from Mozilla Research. It aims to speed up loading times of webpages by achieving a reduction in file size (of about 10%) and therefore transmission time through improvement of coding efficiency while retaining image quality. To achieve this, it uses more processing power for the encoding (asymmetry) while retaining full compatibility with the JPEG standard and requiring no changes on the decoder side.{{cn|date=February 2025}} The techniques MozJPEG uses to achieve high compression include optimising [[Huffman coding|Huffman]] trees, using progressive coding to optimally split the spectrum of DCT coefficients into separate scans, and through the use of [[trellis quantisation]]. Additionally, the presets are aggressively tuned towards the minimisation of file sizes.{{cn|date=February 2025}} Besides libjpeg-turbo, MozJPEG also builds upon jpegcrush, a [[Perl]] script by Loren Merritt.<ref name="heise.de"/><ref name="golem.de"/> === Jpegli === {{Infobox software | name = Jpegli | developer = [[Google]] | released = {{start date and age|2020|11|14}} | website = {{URL|github.com/google/jpegli}} | latest release version = 0.11.0<ref>[https://github.com/google/jpegli/blob/main/CHANGELOG.md Jpegli Changelog]</ref> | latest release date = {{Release date and age|2024|09|13}} }} In April 2024, Google introduced ''Jpegli'', a new JPEG coding library that offers enhanced capabilities and a 35% compression ratio improvement at high quality compression settings, while the coding speed is comparable with MozJPEG.<ref>{{cite web |title=Introducing Jpegli: A New JPEG Coding Library |url=https://opensource.googleblog.com/2024/04/introducing-jpegli-new-jpeg-coding-library.html |publisher=Google Open Source Blog |access-date=4 April 2024 |archive-url=https://web.archive.org/web/20240403181607/https://opensource.googleblog.com/2024/04/introducing-jpegli-new-jpeg-coding-library.html |archive-date=3 April 2024 |date=3 April 2024}}</ref> == ISO libjpeg == {{main|JPEG XT#libjpeg}} ISO/IEC [[Joint Photography Experts Group]] maintains a reference software implementation for base [[JPEG]] (ISO/IEC 10918-1 and 18477-1) and [[JPEG XT]] extensions (ISO/IEC 18477 Parts 2 and 6-9), as well as lossless [[JPEG-LS]] (ISO/IEC 14495).<ref name=software>{{Cite web|url=https://jpeg.org/jpegxt/software.html|title = Jpeg - Jpeg Xt}}</ref> It also includes some of the optimizations of MozJPEG. Though also named libjpeg, it is not related to the source code provided by Independent JPEG Group (IJG) and does not support proprietary extensions introduced by IJG since 2007. ==See also== {{Portal|Free Software}} * [[Lossy compression#Transcoding and editing|Lossless editing]] * [[Guetzli|The Guetzli JPEG encoder]] ==References== {{Reflist|30em|refs= <ref name="jpegcrop">[https://jpegclub.org/jpegcrop/ Jpegcrop Preferences and Options description]</ref> <ref name="patent-fail">[http://filmicgames.com/archives/778 Filmic Games >> The greatest failure of our patent system was...] {{webarchive|url=https://web.archive.org/web/20120901070906/http://filmicgames.com/archives/778 |date=2012-09-01 }}</ref> <ref name="bug680385">[https://bugzilla.mozilla.org/show_bug.cgi?id=680385 680385 - Firefox does not show arithmetic coded jpegs]</ref> <ref name="jpegtran">[https://jpegclub.org/jpegtran/ New jpegtran features]</ref> <ref name="JPEG-homepage">[http://old.jpeg.org/jpeg/ JPEG homepage]</ref> <ref name="libjpeg-turbo">{{cite web|url=http://libjpeg-turbo.virtualgl.org/|title=libjpeg-turbo|website=libjpeg-turbo}}</ref> <ref name="compatibility-analysis">{{cite web |url=https://abi-laboratory.pro/tracker/timeline/libjpeg/ |title=libjpeg: API/ABI changes review |accessdate=2017-10-28 }}</ref> <ref name="ijg-is-back">Mans Rullgard (Hardwarebug.org), August 4, 2009: [http://hardwarebug.org/2009/08/04/ijg-is-back/ IJG is back] {{Webarchive|url=https://web.archive.org/web/20140716155045/http://hardwarebug.org/2009/08/04/ijg-is-back/ |date=2014-07-16 }}</ref> <ref name=TomSmartScale>{{cite web |last1=Lane |first1=Tom |title=Libjpeg-turbo-users, jpeg-9, API/ABI compatibility, and the future role of this project |url=https://lists.fedoraproject.org/pipermail/devel/2013-January/176400.html |website=fedoraproject.org |archive-url=https://web.archive.org/web/20140103045802/https://lists.fedoraproject.org/pipermail/devel/2013-January/176400.html |archive-date=January 3, 2014 |date=January 16, 2013 |url-status=dead}}</ref> <ref name="v8review">{{cite web |last1=Rullgard |first1=Mans |title=IJG swings again, and misses |url=https://hardwarebug.org/2010/02/01/ijg-swings-again-and-misses/ |website=Hardwarebug |archive-url=https://web.archive.org/web/20241210233017/https://hardwarebug.org/2010/02/01/ijg-swings-again-and-misses/ |archive-date=December 10, 2024 |date=February 1, 2010 |url-status=dead}}</ref> <ref name="MozJPEG2">Sebastian Grüner, 16. Juli 2014: [http://golem.de/1407/107916 MozJPEG 2.0: Facebook unterstützt JPEG-Encoder von Mozilla]</ref> <ref name="CloudFlare">{{Cite web|url=http://www.soeren-hentzschel.at/mozilla/2014/07/30/cloudflare-moechte-zu-mozillas-jpeg-encoder-beitragen/|title=CloudFlare möchte zu Mozillas JPEG-Encoder beitragen|date=30 July 2014}}</ref> <ref name="heise.de">André Kramer (heise.de-Newsticker), January 14, 2013: [http://heise.de/-2135812 Mozilla-Encoder verbessert JPEG-Kompression]</ref> <ref name="turbo-software">[http://libjpeg-turbo.virtualgl.org/About/Software Software That Uses or Provides libjpeg-turbo]. February 9, 2012.</ref> <ref name="Chromium">[http://code.google.com/p/chromium/issues/detail?id=48789#c19 Issue 48789 – chromium – Use libjpeg-turbo instead of libjpeg]. April 14, 2011.</ref> <ref name="turbo 1.2">[https://bugzilla.mozilla.org/show_bug.cgi?id=698519 Bug 698519 – Update to libjpeg-turbo 1.2]. February 28, 2012</ref> <ref name="Fedora">[http://lists.fedoraproject.org/pipermail/devel/2010-May/136575.html libjpeg for F14]. February 9, 2012.</ref> <ref name="turboREADME">[https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/README.md libjpeg-turbo README file] {{webarchive|url=https://web.archive.org/web/20181214062148/https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/README.md |date=2018-12-14 }}</ref> <ref name="golem.de">Andreas Donath (golem.de), March 6, 2014: [http://golem.de/1403/104950 Mozilla will JPEGs besser komprimieren]</ref> }} ==External links== {{commons category|Libjpeg|lcfirst=yes}} * [http://www.faqs.org/faqs/jpeg-faq/ JPEG FAQs] * {{cite web |first1= Robert |last1= Nyman |first2= Josh |last2= Aas |date= Aug 6, 2014 |url= https://hacks.mozilla.org/2014/08/using-mozjpeg-to-create-efficient-jpegs/ |title= Using MozJPEG to Create Efficient JPEGs |publisher= Mozilla |work= Hacks }} [[Category:JPEG]] [[Category:Graphics libraries]] [[Category:C (programming language) libraries]] [[Category:Free software programmed in C]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:Cn
(
edit
)
Template:Code
(
edit
)
Template:Commons category
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox software
(
edit
)
Template:Lowercase title
(
edit
)
Template:Main
(
edit
)
Template:Main other
(
edit
)
Template:Portal
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Sister project
(
edit
)
Template:Template other
(
edit
)
Template:Val
(
edit
)
Template:Version
(
edit
)