Libjpeg

维基百科,自由的百科全书
跳转到导航 跳转到搜索
libjpeg
Logo IJG libjpeg v9
開發者独立JPEG工作组(Independent JPEG Group)
首次发布1991年10月7日,​34年前​(1991-10-07
当前版本9e(2022年1月16日,​4年前​(2022-01-16
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言C
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统跨平台
    类型函式庫
    许可协议自定义类BSD自由软件
    网站ijg.org

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

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

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

    实用程序[编辑]

    下列实用程序随libjpeg提供:

    • cjpeg和djpeg:用于JPEG与其他流行的图像文件格式之间的转换。
    • rdjpgcom和wrjpgcom:用于在JPEG文件中插入和提取文字注释。
    • jpegtran:用于在不同JPEG格式之间进行无损转换的工具。

    jpegtran[编辑]

    File:CropGUI GTK small.png
    jpegtran無需重新編碼即可轉換JPEG數據(這裡有用戶界面CropGUI)

    命令列介面 jpegtran提供了幾種功能,用於重新格式化和重新編碼DCT係數的表示,分別用於轉換實際圖像數據和丟棄JPEG文件中的輔助數據。 關於係數表示的變換包括:

    這些轉變都是完全無損且可逆的。 對圖像數據的轉換包括:

    • 消除某些圖像程序插入的非標準應用程序特定數據,
    • 對文件執行某些轉換,例如:
      • 丟棄顏色通道(轉換為灰階),
      • 旋轉和翻轉英语flipped image90度,
      • 裁剪圖像塊邊框(8×8或16×16像素),
      • 縮放[5]

    這些是非破壞性資料壓縮並且對於保留的圖像數據是可逆的。重複轉檔時不重新壓縮現有資料解決重複編碼(修改)對資料進行二次壓縮導致多次量化失真英语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标准的成功的关键。许多公司将其整合到各种产品中,如图像编辑器网络浏览器[6]

    版本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 ...[7]
    停止支援: 8 SmartScale
    (可变块大小)
    block_size/lim_Se etc. Evolution of JPEG[8]
    最新版本: 9 内部颜色转换
    (FF F8 LSE扩展标记)
    color_transform JPEG 9 Lossless Coding[9]
    InfAI JPEG Development Site页面存档备份,存于互联网档案馆[10]
    格式: 停止支援 支援中 最新預覽

    时间线[编辑]

    <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
    

    </timeline> <timeline> 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:2016 shift:(-6,0)  text:"9b"
    

    </timeline>

    复刻[编辑]

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

    libjpeg-turbo[编辑]

    libjpeg
    Logo libjpeg-turbo
    開發者libjpeg-turbo项目
    首次发布2010年,​16年前​(2010
    当前版本3.0.0, 2023年7月3日,​2年前​(2023-07-03
    源代码库
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    引擎
      Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
      许可协议
        Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
        网站libjpeg-turbo.org

        libjpeg-turbo是libjpeg的一个复刻,它采用单指令流多数据流(SIMD)指令来加速JPEG编码和解码基础效率。许多项目现在使用libjpeg-turbo而不是libjpeg,包括流行的GNU/Linux发行版(FedoraDebianMageiaOpenSUSE等)、MozillaChrome[12][13][14]除了性能方面,部分项目也因它允许向后保留与旧的libjpeg v6b版本的ABI兼容性而选择使用libjpeg-turbo。[15]libjpeg v7、v8和v9已打破与早期版本的ABI兼容性。[16]

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

        mozjpeg[编辑]

        libjpeg
        mozjpeg
        mozjpeg尝试若干次对DCT系数频谱的分割
        mozjpeg尝试若干次对DCT系数频谱的分割
        開發者Mozilla Research
        首次发布2014年3月4日,​12年前​(2014-03-04
        当前版本4.0.3,2021年2月26日,​5年前​(2021-02-26[19]
        源代码库
        • {{URL|example.com|可选的显示文本}}
        Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
        引擎
          Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
          许可协议
            Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
            网站github.com/mozilla/mozjpeg

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

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

            参见[编辑]

            参考资料[编辑]

            1. ^ JPEG JFIF. [2017-03-17]. (原始内容存档于2020-11-09). 
            2. ^ Jpegcrop Preferences and Options description. [2017-03-17]. (原始内容存档于2020-07-11). 
            3. ^ Filmic Games >> The greatest failure of our patent system was.... [2017-03-17]. (原始内容存档于2012-09-01). 
            4. ^ 680385 - Firefox does not show arithmetic coded jpegs. [2017-03-17]. (原始内容存档于2019-03-10). 
            5. ^ New jpegtran features. [2017-03-17]. (原始内容存档于2020-11-09). 
            6. ^ JPEG homepage. [2017-03-17]. (原始内容存档于2014-11-29). 
            7. ^ Contributed document - Word .doc file: ITU-T JPEG-Plus Proposal R3页面存档备份,存于互联网档案馆
            8. ^ Contributed document - Word .doc file: Evolution of JPEG页面存档备份,存于互联网档案馆
            9. ^ Contributed document - Word .doc file: JPEG 9 Lossless Coding页面存档备份,存于互联网档案馆
            10. ^ News c't magazine 2012 issue 18 page 43, Software Links页面存档备份,存于互联网档案馆
            11. ^ 存档副本. [2017-03-17]. (原始内容存档于2020-11-16). 
            12. ^ Software That Uses or Provides libjpeg-turbo页面存档备份,存于互联网档案馆). February 9, 2012.
            13. ^ Issue 48789 – chromium – Use libjpeg-turbo instead of libjpeg页面存档备份,存于互联网档案馆). April 14, 2011.
            14. ^ Bug 698519 – Update to libjpeg-turbo 1.2页面存档备份,存于互联网档案馆). February 28, 2012
            15. ^ libjpeg for F14页面存档备份,存于互联网档案馆). February 9, 2012.
            16. ^ libjpeg: API changes/compatibility页面存档备份,存于互联网档案馆). February 9, 2012
            17. ^ libjpeg-turbo README file. [2017-03-17]. (原始内容存档于2014-08-12). 
            18. ^ What About libjpeg v9?. libjpeg-turbo team. [February 8, 2013]. (原始内容存档于2020-11-12). 
            19. ^ Releases · mozilla/mozjpeg. github.com. [2021-04-14]. (原始内容存档于2022-05-07). 
            20. ^ André Kramer (heise.de-Newsticker), January 14, 2013: Mozilla-Encoder verbessert JPEG-Kompression页面存档备份,存于互联网档案馆
            21. ^ 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”的参考文献没有在文中使用

            外部链接[编辑]