WebP的問題和解決方案

千萬不要用webp作app的logo,logo仍是老老實實用png吧。html

加載比png慢

webp相比於png最明顯的問題是加載稍慢,不過如今的智能設備硬件配置愈來愈高,這點差別愈來愈小。騰訊以前有一篇對於webp的分析文十分不錯,若是你準備要用webp了,那麼它絕對值得一看。android

webp的編碼時間較長,是png的5倍以上,但解碼速度與png差很少,甚至不少時候比png快。而webp在編碼時佔用內存比png高25%,解碼時比png低30%。——摘自《WebP原理和Android支持現狀介紹》git

只支持4.2.1+

官方文檔中說只有在4.2.1+以上的機型,才能解析無損或者有透明度調整的webp圖片,4.0+纔開始支持無透明度的webp圖片。我經過雲測發現,在4.0~4.2.1的系統中,帶有透明度的webp圖片雖然不會崩潰,可是徹底沒法顯示。github

《APK瘦身記,如何實現高達53%的壓縮效果》一文中也提到有alpha值的jpg圖片通過webp轉換後,沒法在4.0、4.1的Android系統上運行的問題,具體緣由見官方文檔web

image_1asbq6bejqva1mtuvaj3kc1al22n.png-14kB

機型兼容性不理想

除了兼容性問題外,webp在某些機型和rom上可能會出現一些詭異的問題。在三星的部分機型上,部分有alpha通道的圖中會有一條很明顯的黑線(三星的rom對於shape的alpha的支持也有問題,是紅線)。在小米2刷成4.xx的手機上,系統未能正確識別xml文件中描述的webp圖片,也會致使加載webp失敗。chrome

不便於預覽

由於webp的圖片格式是很難預覽的,as也沒有辦法直接預覽webp格式,我通常是經過chrome瀏覽器打開webp,十分不方便。瀏覽器

image_1asbq487rk9b1ff514p7nrefe02a.png-115.1kB

咱們知道gradle在build時,有一個mergeXXXResource Task,它將項目的各個aar中全部的res資源統一整合到/build/intermediates/res/flavorName/{buildType}目錄下。app

webpConvertPlugin這個gradle插件能夠在mergeXXXResource Task和processXXXResource Task之間插入一個task,這個task會將上述目錄下的drawable進行統一處理,將項目目錄裏的png、jpg圖片(不包含.9圖片,webp轉換後顯示效果不佳)批量處理成webp圖片,這樣可讓咱們在平常開發時用png、jpg,正式發包時用webp。ide

相關文章
相關標籤/搜索