Libjpeg
- 9f (2024年1月14日;穩定版本)[1]
![編輯維基數據鏈接](http://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png)
libjpeg是一个完全用C语言编写的处理JPEG图像数据格式的自由函式庫。它包含一个JPEG编解码器的算法实现,以及用于处理JPEG数据的多种实用程序。
该套软件采用C语言编写,并分发为附有源代码的自由软件,采用自定义的宽松(类BSD)自由软件许可证,权利要求为署名(英语:attribution (copyright))。原始版本由独立JPEG工作组(IJG)维护和发布。此外,也有数个提供额外特性的分叉(Fork)。
JPEG JFIF图像在万维网上被广泛使用。它可以调整压缩量级以实现文件大小与视觉质量之间的期望与权衡。[2]
实用程序
下列实用程序随libjpeg提供:
- cjpeg和djpeg:用于JPEG与其他流行的图像文件格式之间的转换。
- rdjpgcom和wrjpgcom:用于在JPEG文件中插入和提取文字注释。
- jpegtran:用于在不同JPEG格式之间进行无损转换的工具。
jpegtran
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/CropGUI_GTK_small.png/220px-CropGUI_GTK_small.png)
命令列介面 jpegtran提供了幾種功能,用於重新格式化和重新編碼DCT係數的表示,分別用於轉換實際圖像數據和丟棄JPEG文件中的輔助數據。 關於係數表示的變換包括:
這些轉變都是完全無損且可逆的。 對圖像數據的轉換包括:
- 消除某些圖像程序插入的非標準應用程序特定數據,
- 對文件執行某些轉換,例如:
- 丟棄顏色通道(轉換為灰階),
- 旋轉和翻轉(英语:flipped image)90度,
- 裁剪圖像塊邊框(8×8或16×16像素),
- 縮放[6]
這些是非破壞性資料壓縮並且對於保留的圖像數據是可逆的。重複轉檔時不重新壓縮現有資料解決重複編碼(修改)對資料進行二次壓縮導致多次量化失真(英语:generation loss)的問題
有一个相关的Windows应用程序Jpegcrop (页面存档备份,存于互联网档案馆)为“jpegtran”提供了一个用户界面。对于Linux等类Unix系统,自由的CropGUI (页面存档备份,存于互联网档案馆)能提供类似功能。 许多程序基于IJG的代码支持JPEG无损转换功能,部分名单见Lossless Applications List (页面存档备份,存于互联网档案馆)(英文)。
历史
独立JPEG工作组(IJG)的JPEG实现首次公开发布于7 October 1991,并在那是已相当完善。 开发主要由Tom Lane(英语:Tom Lane (computer scientist))完成。 IJG的开源是其中一个主要的开源包,并且是JPEG标准的成功的关键。许多公司将其整合到各种产品中,如图像编辑器和网络浏览器。[7]
版本5发布于1994年9月24日,整个代码库被重写。它引入了名为rdjpgcom和wrjpgcom的实用程序用于处理嵌入的文字注释。
版本6于2 August 1995到来,支持渐进JPEG和第一版jpegtran实用程序。
摘要
主版本 | 新增文件格式特性 | 新增主记录项 | 参考资料 |
---|---|---|---|
舊版本,不再支援: 6 | 渐进式JPEG支持 | progressive_mode ... | ITU-T Recommendation T.81 ISO/IEC IS 10918-1 |
舊版本,不再支援: 7 | 算术编码支持 | scale_num/scale_denom for compression (encoding) ... | ITU-T JPEG-Plus Proposal ...[8] |
舊版本,不再支援: 8 | SmartScale (可变块大小) | block_size/lim_Se etc. | Evolution of JPEG[9] |
當前版本: 9 | 内部颜色转换 (FF F8 LSE扩展标记) | color_transform | JPEG 9 Lossless Coding[10] InfAI JPEG Development Site (页面存档备份,存于互联网档案馆)[11] |
图例: | 舊版本 | 舊版本,仍被支援 | 当前版本 | 最新预览版本 | 未来版本 |
---|
时间线
![](http://upload.wikimedia.org/wikipedia/zh/timeline/c4j95shn9pe884n2l6hzviglfs31fhb.png)
![](http://upload.wikimedia.org/wikipedia/zh/timeline/bohmn9866uj75bw0b33zkgv526d6rw3.png)
复刻
比较著名的复刻是libjpeg-turbo,它优化了执行的速度;还有mozjpeg,它的优化目标是更小的文件大小。除了这些以外,还有一个出自國際標準化組織(ISO)的libjpeg,其目的是所有JPEG 1标准的完整实现。[12]
libjpeg-turbo
![]() | |
開發者 | libjpeg-turbo项目 |
---|---|
首次发布 | 2010年,14年前(2010) |
当前版本 | 3.0.0, 2023年7月3日,13個月前(2023-07-03) |
网站 | libjpeg-turbo |
libjpeg-turbo是libjpeg的一个复刻,它采用单指令流多数据流(SIMD)指令来加速JPEG编码和解码基础效率。许多项目现在使用libjpeg-turbo而不是libjpeg,包括流行的GNU/Linux发行版(Fedora、Debian、Mageia、OpenSUSE等)、Mozilla和Chrome。[13][14][15]除了性能方面,部分项目也因它允许向后保留与旧的libjpeg v6b版本的ABI兼容性而选择使用libjpeg-turbo。[16]libjpeg v7、v8和v9已打破与早期版本的ABI兼容性。[17]
libjpeg-turbo可以配置为与libjpeg v7或v8 ABI兼容,但,但它并没有实现IJG近期发布的完整的功能集,包括SmartScale格式的扩展名。[18][19]因此,通过libjpeg v8和之后版本创建的SmartScale文件将不能被libjpeg-turbo正确解压。
mozjpeg
![]() | |
![]() mozjpeg尝试若干次对DCT系数频谱的分割 | |
開發者 | Mozilla Research |
---|---|
首次发布 | 2014年3月4日,10年前(2014-03-04) |
当前版本 | 4.0.3,2021年2月26日,3年前(2021-02-26)[20] |
网站 | github |
mozjpeg是由Josh Aas和其他Mozilla Research人员完成的libjpeg-turbo的一个复刻。它旨在通过减少文件大小(约10%)来加快网页的加载时间,以及在不改变图像质量的前提下提高编码效率。为达到此目的,它在编码(不对称)方面使用更多处理能力,同时保持与JPEG标准的完全兼容性,不需要在解码器侧做任何改变。它实际通过优化霍夫曼编码树完成。
除了libjpeg-turbo,mozjpeg版本也建立在jpegcrush之上,这是Loren Merritt编写的一个Perl脚本。[21][22]
参见
参考资料
- ^ Independent JPEG Group. [2024年1月27日].
- ^ JPEG JFIF. [2017-03-17]. (原始内容存档于2020-11-09).
- ^ Jpegcrop Preferences and Options description. [2017-03-17]. (原始内容存档于2020-07-11).
- ^ Filmic Games >> The greatest failure of our patent system was.... [2017-03-17]. (原始内容存档于2012-09-01).
- ^ 680385 - Firefox does not show arithmetic coded jpegs. [2017-03-17]. (原始内容存档于2019-03-10).
- ^ New jpegtran features. [2017-03-17]. (原始内容存档于2020-11-09).
- ^ JPEG homepage. [2017-03-17]. (原始内容存档于2014-11-29).
- ^ Contributed document - Word .doc file: ITU-T JPEG-Plus Proposal R3 (页面存档备份,存于互联网档案馆)
- ^ Contributed document - Word .doc file: Evolution of JPEG (页面存档备份,存于互联网档案馆)
- ^ Contributed document - Word .doc file: JPEG 9 Lossless Coding (页面存档备份,存于互联网档案馆)
- ^ News c't magazine 2012 issue 18 page 43, Software Links (页面存档备份,存于互联网档案馆)
- ^ 存档副本. [2017-03-17]. (原始内容存档于2020-11-16).
- ^ Software That Uses or Provides libjpeg-turbo (页面存档备份,存于互联网档案馆). February 9, 2012.
- ^ Issue 48789 – chromium – Use libjpeg-turbo instead of libjpeg (页面存档备份,存于互联网档案馆). April 14, 2011.
- ^ Bug 698519 – Update to libjpeg-turbo 1.2 (页面存档备份,存于互联网档案馆). February 28, 2012
- ^ libjpeg for F14 (页面存档备份,存于互联网档案馆). February 9, 2012.
- ^ libjpeg: API changes/compatibility (页面存档备份,存于互联网档案馆). February 9, 2012
- ^ libjpeg-turbo README file. [2017-03-17]. (原始内容存档于2014-08-12).
- ^ What About libjpeg v9?. libjpeg-turbo team. [February 8, 2013]. (原始内容存档于2020-11-12).
- ^ Releases · mozilla/mozjpeg. github.com. [2021-04-14]. (原始内容存档于2022-05-07).
- ^ André Kramer (heise.de-Newsticker), January 14, 2013: Mozilla-Encoder verbessert JPEG-Kompression (页面存档备份,存于互联网档案馆)
- ^ Andreas Donath (golem.de), March 6, 2014: Mozilla will JPEGs besser komprimieren (页面存档备份,存于互联网档案馆)
引用错误:在<references>
标签中name属性为“libjpeg-turbo”的参考文献没有在文中使用
引用错误:在<references>
标签中name属性为“ijg-is-back”的参考文献没有在文中使用
引用错误:在<references>
标签中name属性为“SmartScale”的参考文献没有在文中使用
引用错误:在<references>
标签中name属性为“v8review”的参考文献没有在文中使用
引用错误:在<references>
标签中name属性为“mozjpeg2”的参考文献没有在文中使用
<references>
标签中name属性为“CloudFlare”的参考文献没有在文中使用外部链接
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png)
- Official website of the Independent JPEG Group(英文)
- JPEG FAQs (页面存档备份,存于互联网档案馆)(英文)
- JPEGclub (页面存档备份,存于互联网档案馆)(英文) – 为libjpeg提供额外特性
- libjpeg面向Windows的二进制包 (页面存档备份,存于互联网档案馆)(英文)(托管于SourceForge.net上的GnuWin32(英语:GnuWin32)中)
- libjpeg-turbo (页面存档备份,存于互联网档案馆)(英文),一个ABI及API兼容的libjpeg的复刻,它使用x86 SIMD指令实现参考实现的大幅加速。
- GitHub上的mozjpeg - filesize-optimising复刻(英文)
- Josh Aas, Robert Nyman; August 2014: 使用mozjpeg创建高效JPEG (页面存档备份,存于互联网档案馆)(英文) – mozjpeg的实用性概述
- 关于JPEG的那点事儿 (页面存档备份,存于互联网档案馆)(简体中文),2016/02/21