谷歌開源圖片壓縮演算法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