谷歌開源圖片壓縮演算法Guetzli實測體驗報告

谷歌大神又出開源新技術啦,這次是對JPEG格式的圖片採用全新演算法重新編碼,輸出的圖片還是JPEG但是圖片大小明顯縮小,而質量不但沒有損失,甚至還更加優化,速速來體驗一把。

一、環境安裝

下載谷歌開源軟體,編譯安裝以後實際上是一個bin工具。輸入圖片,輸出jpeg格式圖片。

項目地址:google/guetzli

文檔下面有寫Ubuntu、Arch Linux、windows、macOS的安裝方式。我們以 Ubuntu 系統為例,介紹如何安裝 guetzli。

首先,克隆谷歌的項目文件:

git clone https://github.com/google/guetzli.git

然後,安裝 libpng 軟體包:

sudo apt-get install libpng-devcd guetzli

然後直接 make ,生成bin文件,強大的開源工具 ./bin/Release/guetzli 於是就生成了。

二、實戰測試

guetzli的使用比較簡單,參數很少。默認採用95的質量,也可以通過 -quality 來指定大於等於84的質量,如果要小於84,需要修改源碼。輸入必須是符合轉換要求的圖片,輸出則是jpeg格式圖片。

什麼是符合要求的圖片?

官方說明:

Only YUV color space input jpeg is supported

實測發現,使用透明通道的png圖、非YUV的jpeg比如黑白圖、gif圖都是不能轉換的。

guetzli效果如何?

批量實測1292張圖片。使用默認參數,也就是原圖的95%質量。

1185張轉換成功,佔比91.7%,其中3張png轉換jpeg以後圖片比原圖更大,佔比0.2%。107張無法轉換,佔比8.3%。

原圖平均大小33KB,guetzli壓縮後23.4KB,平均壓縮率29%,平均每張耗時7956毫秒。

單張最大的圖片3.76MB,guetzli壓縮後2.55MB,壓縮率31.5%,耗時976949毫秒(16分鐘)。

單張最小的圖片757B,guetzli壓縮後603B,壓縮率20%,耗時65毫秒。

另外借用國外媒體報道中使用的對比圖片,直觀地感受下壓縮後的效果:

左邊是原圖,中間是 libjpeg 壓縮後,右邊是使用 guetzli 壓縮後。

guetzli的資源消耗如何?

官方文檔說,1MPIX的圖片處理需要消耗300M內存。

實測一個1MB大小1920x2560的圖片,有4.9MPIX。理論消耗內存1474MB,實際消耗1009MB內存,實際與理論基本相符。由此看出這個工具是個內存消耗大戶,60G內存只夠處理200MPIX,也就是同時處理40張左右的1920x2560圖片。

CPU消耗則一直是100%單核佔用。當然實際使用多核機器可以同時跑多個進程。有多少核就能跑多少個guetzli任務。

壓縮圖片耗時跟圖片大小程離散相關,圖片越大,耗時越久:

測試環境使用的是8核16G內存的機器。單核平均處理23KB的圖片需要約8秒鐘,這個耗時比較長,註定無法進行在線實時壓縮。

三、優劣對比

guetzli的優勢在哪?

實測對質量在90或以下的jpg圖片,guetzli輸出的新圖質量不會降低。而實際壓縮率能夠達到平均壓縮率29%。

兼容性比較好,輸出的jpeg格式圖片通用性非常高。沒有webp、sharpp那種協議不兼容的困擾。

在客戶端jpeg格式的圖片編解碼速度比其他私有協議快很多。

guetzli有哪些劣勢?

guetzli處理類型局限性,並不能應對全部類型的圖片。只能處理YUV顏色編碼的圖片。

時效性較差,圖片越大處理越慢。1MB的圖片處理需要291秒,本次測試平均23KB的圖片需要8秒。

本文轉載自騰雲閣,已獲得作者授權。


推薦閱讀:

基於區塊鏈的機器學習模型創建方案
序列化二叉樹
ICA-獨立成分分析
Leetcodes Solution 3 Longest Substring Without Repeating Characters

TAG:谷歌Google | 演算法 |