谷歌大神又出開源新技術啦,此次是對JPEG格式的圖片採用全新算法從新編碼,輸出的圖片仍是JPEG可是圖片大小明顯縮小,而質量不但沒有損失,甚至還更加優化,速速來體驗一把。git
下載谷歌開源軟件,編譯安裝之後其實是一個bin工具。輸入圖片,輸出jpeg格式圖片。github
文檔下面有寫Ubuntu、Arch Linux、windows、macOS的安裝方式。咱們以 Ubuntu 系統爲例,介紹如何安裝 guetzli。算法
首先,克隆谷歌的項目文件:windows
git clone https://github.com/google/guetzli.git
而後,安裝 libpng 軟件包:工具
sudo apt-get install libpng-dev cd guetzli
而後直接 make
,生成bin文件,強大的開源工具 ./bin/Release/guetzli
因而就生成了。測試
guetzli的使用比較簡單,參數不多。默認採用95的質量,也能夠經過 -quality
來指定大於等於84的質量,若是要小於84,須要修改源碼。輸入必須是符合轉換要求的圖片,輸出則是jpeg格式圖片。優化
官方說明:google
Only YUV color space input jpeg is supported編碼
實測發現,使用透明通道的png圖、非YUV的jpeg好比黑白圖、gif圖都是不能轉換的。
批量實測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 壓縮後。
官方文檔說,1MPIX的圖片處理須要消耗300M內存。
實測一個1MB大小1920x2560的圖片,有4.9MPIX。理論消耗內存1474MB,實際消耗1009MB內存,實際與理論基本相符。由此看出這個工具是個內存消耗大戶,60G內存只夠處理200MPIX,也就是同時處理40張左右的1920x2560圖片。
CPU消耗則一直是100%單核佔用。固然實際使用多核機器能夠同時跑多個進程。有多少核就能跑多少個guetzli任務。
壓縮圖片耗時跟圖片大小程離散相關,圖片越大,耗時越久:
測試環境使用的是8核16G內存的機器。單核平均處理23KB的圖片須要約8秒鐘,這個耗時比較長,註定沒法進行在線實時壓縮。
實測對質量在90或如下的jpg圖片,guetzli輸出的新圖質量不會下降。而實際壓縮率可以達到平均壓縮率29%。
兼容性比較好,輸出的jpeg格式圖片通用性很是高。沒有webp、sharpp那種協議不兼容的困擾。
在客戶端jpeg格式的圖片編解碼速度比其餘私有協議快不少。
guetzli處理類型侷限性,並不能應對所有類型的圖片。只能處理YUV顏色編碼的圖片。
時效性較差,圖片越大處理越慢。1MB的圖片處理須要291秒,本次測試平均23KB的圖片須要8秒。
本文轉載自騰雲閣,已得到做者受權。