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

相关文章
相关标签/搜索