libjpeg-turbo 最初基於 libjpeg/SIMD ,它是 libjpeg v6b 的 MMX 加速衍生物
在Linux中,當談到編解碼器時,大多數用戶通常不會擔心它,因為在許多發行版中,這個問題通常已經通過默認包含在目標中來解決,除了查看或編輯應用程序之外,他們還貢獻了自己的顆粒沙子,包括一些額外的東西。
但是,當用戶想要提高某些方面的性能(例如編輯任務或簡單的休閒)時會發生什麼。 在這一部分中,並非所有用戶都會參與,但對於那些感興趣的用戶,他們傾向於研究每種格式提供的優點和缺點。
這就是我們今天要討論的編解碼器的用武之地,即 JPEG 圖像格式是最流行的圖像格式之一,但這並不意味著它是最好的,因為還有其他格式比這提供了許多優勢。
libjpeg-turbo 旨在解決 JPEG 相對於其他格式的一些不足之處,正如其 GitHub 儲存庫中所述:
libjpeg-turbo 是一種 JPEG 圖像編解碼器,它使用 SIMD 指令來加速 x86、x86-64、Arm、PowerPC 和 MIPS 系統上的基準 JPEG 壓縮和解壓縮,以及 x86、x86-64 和 arm 上的漸進式 JPEG 壓縮。 在此類系統上,在其他條件相同的情況下,libjpeg-turbo 通常比 libjpeg 快 2-6 倍。 在其他類型的系統上,libjpeg-turbo 憑藉其高度優化的 Huffman 編碼例程,仍然可以顯著優於 libjpeg。 在許多情況下,libjpeg-turbo 的性能可與專有高速 JPEG 編解碼器相媲美。
libjpeg-turbo 實現了傳統的 libjpeg API 和功能較弱但更簡單的 TurboJPEG API。 libjpeg-turbo 還具有色彩空間擴展功能,允許其壓縮/解壓縮到 32 位和大端像素緩衝區(RGBX、XBGR 等),以及功能齊全的 Java 接口。
Libjpeg-turbo是經典 libjpeg 函式庫的一個符合 API/ABI 規範的分支,旨在提供最快的編碼和解碼速度。除了標準的 libjpeg API 之外,該庫還提供了其自身的 TurboJPEG API 以及一系列擴展,這些擴展支援多種顏色渲染模型,允許將圖像壓縮到 32 位元像素緩衝區(RGBX、XBGR)或進行解碼。
在其他架構上,加速效果不那麼顯著,但由於使用了優化的霍夫曼編碼函數,該庫仍然明顯比 libjpeg 快,並且在性能方面接近高品質的專有 JPEG 編解碼器。
值得一提的是,ibjpeg-turbo 最近發布了新的 3.0 分支,新版本的主要創新點如下:
- 添加了對 4:1:1 顏色子採樣的支持,允許您轉換、裁剪和旋轉 4:1:1 子採樣 JPEG 圖像而不會造成質量損失,以及將其解壓縮並轉換為 YUV 顏色模型。
- 顯著加速最佳霍夫曼表的計算。 對於小圖像 (256×256),這一變化使壓縮時間最多減少兩倍。
- 添加了對具有每通道 12 位顏色表示的 JPEG 圖像應用算術熵編碼的功能。
- TurboJPEG API 經過重大重新設計,消除了現有限制並提高了可擴展性。 例如,所有 C 函數現在都以“tj3”為前綴。
- 許多標誌和模式已從函數參數轉換為通用 API 參數。
- 在有損和無損模式下支持每通道 12 和 16 位顏色的圖像。
- 添加了無損 JPEG 文件模式,適用於每通道 8、12 和 16 位顏色的圖像。 添加了新函數 jpeg_enable_lossless() 和命令行選項“-lossless”。
- 刪除了 Java TurboJPEG API 中已棄用的字段、構造函數和方法。
最後,值得一提的是,未來 libjpeg-turbo 的作者打算將該項目的工作限制為僅發布包含錯誤修復的更新。 在獲得項目資金之前,新版本 3.1 的開發不會開始。
如果您對程式碼感興趣,它以三種類似 BSD 的授權發布:IJG 授權、BSD 修改版授權和 zlib 授權。二進位檔案適用於 Linux、macOS 和 Windows 系統。您可以點擊以下連結查看更多詳情並下載二進位檔案。