WebP簡介:
WebP 格式是 Google 于2010年發布的一種支持有損壓縮和無損壓縮的圖片文件格式,派生自圖像編碼格式 VP8。它具有較優的圖像數據壓縮算法,能帶來更小的圖片體積,而且擁有肉眼識別無差異的圖像質量,同時具備了無損和有損的壓縮模式、Alpha 透明以及動畫的特性。目前googleG+、YouTube以及Google Play全站都在使用WebP格式的圖片。15年雙11手淘前端技術巡演中提到,淘寶3年前native層面就已經支持WebP, 兩年前H5頁面全面支持。QQ空間裝扮、淘寶廣告圖,Facebook Android也都使用WebP。
以下通過研究WebP圖片格式,盡可能全面地了解WebP圖片的優劣勢以及應用WebP圖片給我們帶來的收益以及風險,最終達到提升用戶體驗,提升圖片加載速度,節省帶寬的目的。
WebP優勢
官方測試:
根據測試,WebP無損壓縮的圖片比PNG格式圖片,文件大小上少 26%;
根據測試,WebP有損圖片在同樣SSIM質量指標上比JPEG格式圖片少25~34%。 SSIM是一種衡量兩張數字影像相似的指標
有損壓縮測試方法簡述:
1.將PNG圖片設置不同的壓縮參數壓縮成JPEG圖片,記錄壓縮后的對比的SSIM。
2.將同一張PNG圖片壓縮成WebP圖片,壓縮的WebP圖片的SSIM指標必須比1中記錄的SSIM高。
其他測試:
同樣質量的WebP與JPG圖片,在線加載速度測試。測試的JPG和WebP圖片大小如下:
測試數據折線圖如下:
從折線圖可以看到,WebP雖然會增加額外的解碼時間,但由于減少了文件體積,縮短了加載的時間,頁面的渲染速度加快了。同時,隨著圖片數量的增多,WebP頁面加載的速度相對JPG頁面增快了。所以,使用WebP基本沒有技術阻礙,還能帶來性能提升以及帶寬節省。
通過以上兩組對比可以得知,WebP在文件大小以及傳輸速度上肯定是擁有優勢的,將極大節省用戶及cdn流量。
動圖
GIF 圖片主要應用于圖片分享類應用中,如微博等。與傳統的 GIF 圖比較,動態 WebP 的優勢在于:
1.支持有損和無損壓縮,并且可以合并有損和無損圖片幀;
2.體積更小,GIF 轉成有損動態 WebP 后可以減小 64% 的體積,轉成無損可以節省 19% 的體積;
3.顏色更豐富,支持 24-bit 的 RGB 顏色以及 8-bit 的 Alpha 透明通道(而GIF 只支持8-bit RGB 顏色以及 1-bit 的透明);
4.添加了關鍵幀、metadata 等數據;
動圖測試:
GIF動圖1?63.9KB ??WebP動圖1?28.9KB
WebP劣勢:
1.各個端支持情況不一。這點會在下一節中詳細說明。
2.遷移成本較大,需要對所有圖片重新編碼,考慮到對舊版的支持,需要額外開辟空間存兩種格式的圖片。
3.編解碼速度上,根據Google的測試,目前WebP與JPG相比較,毫秒級別上,編碼速度慢10倍,解碼速度慢1.5倍。編碼速度即可被沒影響,我們只是在上傳時生成一份WebP圖片。解碼速度則需要客戶端綜合節省下的流量來綜合考慮。總之帶寬節省比cpu消耗更有價值
4.盡管有不少app在使用WebP圖片,但與JPG/PNG相比還是太少了,接受度并沒有太高。
5.app中部分“歸檔化”的交互操作,比如圖片保存,因此這些交互操作上需要進行WebP編解碼成JPG。直接保存下來的webp圖片,非常不方便reuse以及review。
WebP各端支持情況:
瀏覽器支持情況:
根據對目前國內瀏覽器占比與 WebP 的兼容性分析,大約有 50% 以上的國內用戶可以直接體驗到 WebP。
如何檢測瀏覽器是否支持:
1.JavaScript 能力檢測,對支持 WebP 的用戶輸出 WebP 圖片
2.使用 WebP?支持插件:WebPJS
3.有一部分CDN廠商是提供webp檢測服務
4.Http header accept type 返回接受的image typ
5.GooglePageSpeed提供自動將jpg轉化成webp,提供給支持webp的瀏覽器上。
Android:
Android 4.0及以上原生支持; 4.0以下可以使用官方提供提供的編解碼庫。
iOS:
iOS native 不支持,safari目前也不支持。據說ios 10的safari有可能會支持。native支持層面,google官方,以及第三方都提供了解決方案。國內也有不少ios團隊在做webp圖片的支持工作。
視覺設計:
Photoshop 原生是不支持WebP的,但有插件提供WebP支持。
總結:
1.圖片占據云音樂cdn服務中很大的一部分流量,更節省的圖片流量對產品及用戶肯定有巨大提升。一部分cnd廠商是支持webp轉化服務或者web支持探測服務的,這點可以問我們的cdn廠商。
2.目前各端從jpg/png圖片遷移肯定需要一段比較長的過程,并且需要cdn、后臺等準備工作。
參考:
1. WebP官方文檔https://developers.google.com/speed/webp/
2. 淘寶前端優化https://github.com/amfe/article/issues/21
3. 騰訊WebP探尋https://isux.tencent.com/introduction-of-webp.html
4. iOS WebP實踐https://segmentfault.com/a/1190000006266276
5. 七牛云存儲WebP支持https://segmentfault.com/a/1190000002726138
6. 探究WebP一些事兒http://web.jobbole.com/87103/
7. Frequently Asked Questionshttps://developers.google.com/speed/webp/faq
8. 七牛云圖片處理http://blog.qiniu.com/archives/5793
9. https://havecamerawilltravel.com/photographer/webp-website