Jpegtran

libjpeg
Developer(s) Independent JPEG Group
Initial release October 7, 1991; 22 years ago (1991-10-07)
Stable release 9 / January 13, 2013; 17 months ago (2013-01-13)
Development status active
Written in C
Operating system Cross-platform
Type library
License Custom free software license; can be used in any application without royalty, with acknowledgment.
Website ijg.org

libjpeg is a widely used free software library written in C which implements JPEG decoding and encoding functions alongside various utilities for handling JPEG images. This library is maintained by the Independent JPEG Group (IJG), an informal organization which is not affiliated with the JPEG ISO committee.

The Open Source software implementation of the Independent JPEG Group (IJG), as well as being one of the major Open Source packages, was key to the success of the JPEG standard and was incorporated by many companies into a variety of products such as image editors and Internet browsers.[1]

The widely used IJG implementation was first publicly released in October 1991 and has been considerably developed since that time. 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.[2]

Utilities

The following utility programs are available 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 – a utility for lossless transcoding between different JPEG formats.

The jpegtran command-line program is useful to:

  • optimize the Huffman coding layer of a JPEG file to increase compression,
  • convert to JPEG Arithmetic coding to further increase compression (and back),[3][4][5]
  • convert between progressive and non-progressive JPEG formats,
  • eliminate non-standard application-specific data inserted by some image programs, or
  • to perform certain transformations on a file, such as:

...all done "losslessly" (i.e. without decompressing and recompressing the data, and so causing a reduction of image quality due to generation loss).

There is an associated Windows application, Jpegcrop, which provides a user interface to jpegtran.

Version roadmap

Overview

There are currently two conditions which trigger a major version bump of the JPEG library:

  1. New types of files can be created which are not compatible with prior releases, and
  2. Changes in the master records which break the binary compatibility (usually addition of entries for new functions).

In all major upgrades since v6 both conditions 1. and 2. came together, while the source compatibility (API) could largely be retained.

Major version New file format feature New master record entries References
Template:Version progressive JPEG support progressive_mode ... ITU-T Recommendation T.81
ISO/IEC IS 10918-1
Template:Version arithmetic coding support scale_num/scale_denom for
compression (encoding) ...
ITU-T JPEG-Plus Proposal ...[7]
Template:Version SmartScale
(variable block size)
block_size/lim_Se etc. Evolution of JPEG[8]
Template:Version internal color transform
(FF F8 LSE extension marker)
color_transform JPEG 9 Lossless Coding

Template:Version

For version 7 both conditions were different subjects (arith_code entry already existed), other versions are same subject.

Timeline

ImageSize = width:640 height:100 PlotArea = width:90% height:40% left:5% bottom:20% Period = from:1992 till:2006 TimeAxis = orientation:horizontal format:yyyy ScaleMajor = unit:year increment:1 start:1993 # rough scale PlotData =

 color:dullyellow fontsize:S                 # setting standards
 bar:ReleaseYear from:1992 till:1994 # version 4
 bar:ReleaseYear from:1994 till:1995 color:yelloworange # version 5
 bar:ReleaseYear from:1995 till:end # version 6
 at:1993 shift:(-6,0)  text:"4a"
 at:1994 shift:(-3,0)  text:"5"
 at:1995 shift:(-3,0)  text:"6"
 at:1998 shift:(-6,0)  text:"6b"

TextData =

 pos:(20,80) fontsize:M text: Year of Release of Versions # position and text for the title

ImageSize = width:640 height:100 PlotArea = width:90% height:40% left:5% bottom:45% Period = from:2006 till:2020 TimeAxis = orientation:horizontal format:yyyy ScaleMajor = unit:year increment:1 start:2007 # rough scale PlotData =

 color:dullyellow fontsize:S                 # setting standards
 bar:ReleaseYear from:2006 till:2009 # version 6
 bar:ReleaseYear from:2009 till:2010 color:yelloworange # version 7
 bar:ReleaseYear from:2010 till:2013 # version 8
 bar:ReleaseYear from:2013 till:end  color:yelloworange # version 9
 at:2009 shift:(-3,0)  text:"7"
 at:2010 shift:(-3,0)  text:"8"
 at:2012 shift:(-6,0)  text:"8d"
 at:2013 shift:(-3,0)  text:"9"
 at:2014 shift:(-6,0)  text:"9a"

libjpeg-turbo

libjpeg-turbo is a fork of libjpeg that uses SIMD instructions to accelerate baseline JPEG encoding and decoding. Many projects are now using libjpeg-turbo instead of libjpeg, including Fedora (since Fedora 14), Mozilla (since Firefox 5.0, while Firefox 13.0 and later gain additional performance by adding the accelerated Huffman coding routines from libjpeg-turbo 1.2.0 and later, which were previously excluded due to a license conflict), and Google Chrome (since version 11).[11][12][13] Apart from performance, some projects have chosen to use libjpeg-turbo because it allows them to retain backward ABI compatibility with the older libjpeg v6b release.[14] Both libjpeg v7 and v8 broke ABI compatibility with prior releases.[15]

libjpeg-turbo can be configured to be compatible with the libjpeg v7 or v8 ABI, but it does not implement the complete set of features in recent IJG releases, including the SmartScale format extension.[16] The libjpeg-turbo Project has chosen not to support SmartScale, citing concerns regarding the fact that it is not an ITU-T standard and citing their own research that questions the usefulness of the feature. 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.[17] Therefore, SmartScale files created by libjpeg v7 and later will not be readable by libjpeg-turbo, or they will not be decompressed correctly.

See also

Free Software portal

References

External links

  • SourceForge)
  • ClanLib
  • libjpeg-turbo, an ABI-/API-compatible fork of libjpeg that uses x86 SIMD instructions to achieve a substantial speedup over the reference implementation.
  • JPEG FAQs
  • Additional features for libjpeg
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.