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」的參考文獻沒有在文中使用

            外部連結[編輯]