Libjpeg

libjpeg是一個完全用C語言編寫的處理JPEG圖像數據格式的自由函式庫。它包含一個JPEG編解碼器的算法實現，以及用於處理JPEG數據的多種實用程序。
該套軟件採用C語言編寫，並分發為附有源代碼的自由軟件，採用自定義的寬鬆（類BSD）自由軟件許可證，權利要求為署名。原始版本由獨立JPEG工作組（IJG）維護和發佈。此外，也有數個提供額外特性的分叉（Fork）。
JPEG JFIF圖像在萬維網上被廣泛使用。它可以調整壓縮量級以實現文件大小與視覺質量之間的期望與權衡。

**實用程序**
下列實用程序隨libjpeg提供：- cjpeg和djpeg：用於JPEG與其他流行的圖像文件格式之間的轉換。- rdjpgcom和wrjpgcom：用於在JPEG文件中插入和提取文字註釋。- jpegtran：用於在不同JPEG格式之間進行無損轉換的工具。

**jpegtran**
jpegtran無需重新編碼即可轉換JPEG數據(這裡有用戶界面CropGUI)
命令列介面 jpegtran提供了幾種功能，用於重新格式化和重新編碼DCT係數的表示，分別用於轉換實際圖像數據和丟棄JPEG文件中的輔助數據。 關於係數表示的變換包括：- 優化JPEG文件的霍夫曼編碼層以增加壓縮。- 漸進和順序JPEG格式之間的轉換。- 霍夫曼和算術編碼在熵編碼法層之間的轉換。
這些轉變都是完全無損且可逆的。 對圖像數據的轉換包括：- 消除某些圖像程序插入的非標準應用程序特定數據，- 對文件執行某些轉換，例如：
** 丟棄顏色通道（轉換為灰階），
** 旋轉和翻轉90度，
** 裁剪圖像塊邊框（8×8或16×16像素），
** 縮放
這些是非破壞性資料壓縮並且對於保留的圖像數據是可逆的。重複轉檔時不重新壓縮現有資料解決重複編碼(修改)對資料進行二次壓縮導致多次量化失真的問題
有一個相關的Windows應用程序 Jpegcrop date=20200629021141 為“jpegtran”提供了一個用戶界面。對於Linux等類Unix系統，自由的 CropGUI date=20190416135810 能提供類似功能。
許多程序基於IJG的代碼支持JPEG無損轉換功能，部分名單見 Lossless Applications List date=20200512052949 。

**歷史**
獨立JPEG工作組（IJG）的JPEG實現首次公開發佈於1991-10-07，並在那是已相當完善。
開發主要由Tom Lane完成。
IJG的開源是其中一個主要的開源包，並且是JPEG標準的成功的關鍵。許多公司將其整合到各種產品中，如圖像編輯器和網絡瀏覽器。
版本5發佈於1994年9月24日，整個代碼庫被重寫。它引入了名為rdjpgcom和wrjpgcom的實用程序用於處理嵌入的文字註釋。
版本6於1995-08-02到來，支持漸進JPEG和第一版jpegtran實用程序。

**摘要**

**時間線**
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:2016 shift:(-6,0)  text:"9b"

**復刻**
比較著名的復刻是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- 無損數據壓縮#無損編輯- 有損數據壓縮

**參考資料**

**外部鏈接**
 Official website of the Independent JPEG Group-  JPEG FAQs date=20210126191551 -  JPEGclub date=20100116010354  – 為libjpeg提供額外特性-  libjpeg面向Windows的二進制包 date=20200917053339 （託管於SourceForge.net上的GnuWin32中）-  libjpeg-turbo date=20210205205000 ，一個ABI及API兼容的libjpeg的復刻，它使用x86 SIMD指令實現參考實現的大幅加速。- mozjpeg - filesize-optimising復刻- Josh Aas, Robert Nyman; August 2014：  使用mozjpeg創建高效JPEG date=20201112025821  – mozjpeg的實用性概述-  關於JPEG的那點事兒 date=20200926222411 ，2016/02/21