Libjpeg

libjpeg是一个完全用C语言编写的处理JPEG图像数据格式的自由函式庫。它包含一个JPEG编解码器的算法实现，以及用于处理JPEG数据的多种实用程序。

该套软件采用C语言编写，并分发为附有源代码的自由软件，采用自定义的宽松（类BSD）自由软件许可证，权利要求为。原始版本由独立JPEG工作组（IJG）维护和发布。此外，也有数个提供额外特性的分叉（Fork）。

JPEG JFIF图像在万维网上被广泛使用。它可以调整压缩量级以实现文件大小与视觉质量之间的期望与权衡。

实用程序
下列实用程序随libjpeg提供：
 cjpeg和djpeg：用于JPEG与其他流行的图像文件格式之间的转换。
 rdjpgcom和wrjpgcom：用于在JPEG文件中插入和提取文字注释。
 jpegtran：用于在不同JPEG格式之间进行无损转换的工具。

jpegtran
命令列介面 jpegtran提供了幾種功能，用於重新格式化和重新編碼DCT係數的表示，分別用於轉換實際圖像數據和丟棄JPEG文件中的輔助數據。 關於係數表示的變換包括：
 優化JPEG文件的霍夫曼編碼層以增加壓縮。
 漸進和順序JPEG格式之間的轉換。
 霍夫曼和算术编码在熵編碼法層之間的轉換。
這些轉變都是完全無損且可逆的。 對圖像數據的轉換包括：
 消除某些圖像程序插入的非標準應用程序特定數據，
 對文件執行某些轉換，例如：
 丟棄顏色通道（轉換為灰階），
 旋轉和90度，
 裁剪圖像塊邊框（8×8或16×16像素），
 縮放
這些是非破壞性資料壓縮並且對於保留的圖像數據是可逆的。重複轉檔時不重新壓縮現有資料解決重複編碼(修改)對資料進行二次壓縮導致多次的問題

有一个相关的Windows应用程序Jpegcrop 为“jpegtran”提供了一个用户界面。对于Linux等类Unix系统，自由的CropGUI 能提供类似功能。
许多程序基于IJG的代码支持JPEG无损转换功能，部分名单见Lossless Applications List 。

历史
独立JPEG工作组（IJG）的JPEG实现首次公开发布于，并在那是已相当完善。
开发主要由完成。
IJG的开源是其中一个主要的开源包，并且是JPEG标准的成功的关键。许多公司将其整合到各种产品中，如图像编辑器和网络浏览器。

版本5发布于1994年9月24日，整个代码库被重写。它引入了名为rdjpgcom和wrjpgcom的实用程序用于处理嵌入的文字注释。

版本6于到来，支持渐进JPEG和第一版jpegtran实用程序。

 摘要 
 主版本 新增文件格式特性 新增主记录项 参考资料  渐进式JPEG支持 progressive_mode ... ITU-T Recommendation T.81  ISO/IEC IS 10918-1  算术编码支持 scale_num/scale_denom for  compression (encoding) ... ITU-T JPEG-Plus Proposal ...Contributed document - Word .doc file: ITU-T JPEG-Plus Proposal R3   SmartScale （可变块大小） block_size/lim_Se etc. Evolution of JPEGContributed document - Word .doc file: Evolution of JPEG   内部颜色转换 （FF F8 LSE扩展标记） color_transform JPEG 9 Lossless CodingContributed document - Word .doc file: JPEG 9 Lossless Coding   InfAI JPEG Development Site News c't magazine 2012 issue 18 page 43, Software Links 

 时间线 

复刻
比较著名的复刻是libjpeg-turbo，它优化了执行的速度；还有mozjpeg，它的优化目标是更小的文件大小。除了这些以外，还有一个出自國際標準化組織（ISO）的libjpeg，其目的是所有JPEG 1标准的完整实现。

libjpeg-turbo

libjpeg-turbo是libjpeg的一个复刻，它采用单指令流多数据流（SIMD）指令来加速JPEG编码和解码基础效率。许多项目现在使用libjpeg-turbo而不是libjpeg，包括流行的GNU/Linux发行版（Fedora、Debian、Mageia、OpenSUSE等）、Mozilla和Chrome。除了性能方面，部分项目也因它允许向后保留与旧的libjpeg v6b版本的ABI兼容性而选择使用libjpeg-turbo。libjpeg v7、v8和v9已打破与早期版本的ABI兼容性。

libjpeg-turbo可以配置为与libjpeg v7或v8 ABI兼容，但，但它并没有实现IJG近期发布的完整的功能集，包括SmartScale格式的扩展名。因此，通过libjpeg v8和之后版本创建的SmartScale文件将不能被libjpeg-turbo正确解压。

 mozjpeg 

mozjpeg是由Josh Aas和其他Mozilla Research人员完成的libjpeg-turbo的一个复刻。它旨在通过减少文件大小（约10%）来加快网页的加载时间，以及在不改变图像质量的前提下提高编码效率。为达到此目的，它在编码（不对称）方面使用更多处理能力，同时保持与JPEG标准的完全兼容性，不需要在解码器侧做任何改变。它实际通过优化霍夫曼编码树完成。

除了libjpeg-turbo，mozjpeg版本也建立在jpegcrush之上，这是Loren Merritt编写的一个Perl脚本。

 参见 

 JPEG
 无损数据压缩#无损编辑
 有损数据压缩

参考资料

 外部链接 


 JPEG FAQs 
 JPEGclub  – 为libjpeg提供额外特性
 libjpeg面向Windows的二进制包 （托管于SourceForge.net上的中）
 libjpeg-turbo ，一个ABI及API兼容的libjpeg的复刻，它使用x86 SIMD指令实现参考实现的大幅加速。

 Josh Aas, Robert Nyman; August 2014： 使用mozjpeg创建高效JPEG  – mozjpeg的实用性概述
 关于JPEG的那点事儿 ，2016/02/21

Category:C函式庫
Category:用C編程的自由軟體
Category:繪圖函式庫