WebP格式
WebP
是Google
推出的意图改变web
图片JPG
、PNG
、GIF
三分天下局势的一种图片格式,可对图像大幅压缩。它不仅支持无损或有损压缩、alpha
通道,还支持动画演示。在同画质的情况下,WebP
格式图片占用体积相较于jpg
图片大约减少40%
,相较于无损png
图片大约减少30%
。
浏览器支持
Google浏览器Chrome首先引入WebP,此外Opera 11.10也增加对WebP的支持。
如果你能看见下面的图片,说明你的浏览器支持WebP。
这是一幅WebP图片,链接
为什么要使用WebP?
在70%有损比例压缩的情况下,WebP
图片比jpg
图片体积大约减少50%
左右:
体积减小,下载速度自然就会提升,那浏览器对WebP
图片的解析性能怎么样呢? 在手Q
(机型:三星 i9300
)上做了相关的性能专项测试
得出结论:
WebP
、jpg
两种场景,FPS
值差别不大WebP
虽然解码时间比jpg
较长,但是 “下载时间+解码时间”WebP
更占优势
WebP推广的最大困难?
浏览器兼容性有限,有些浏览器不支持,所以大多数业务是通过js
代码判断是否支持webp
,然后通过请求不同的图片格式来做兼容的。 这种方案最大的困难在于对业务不透明,各个业务都需要加入判断代码。
下图为兼容性的情况(数据来源于http://caniuse.com/
)
无痛解决方案
那么怎样能够有一种更方便的使用WebP
的方式呢?
我们探寻了一种对业务透明的解决方案,并推动CDN
支持:在浏览器支持的基础上,业务代码无需要做任何改动,CDN
通过请求头部的accept
字段来决定返回图片的格式。
不用改代码就可以支持,且看抓包例子:
1. 对于accept
头明确指定支持webp
的请求,则返回webp
格式的图片
2. 对于未明确指定支持webp
格式的请求,则返回原图:
目前Google Chrome
发请求时已经会自动带上这个请求头,但是我们目前大多数业务都是在手机QQ
里跑的,怎么样能让手Q
也支持呢? 我们想到了TBS
内核。
TBS内核的支持
为了在手机QQ
上使用WebP
图,我们推动TBS
内核在025413
版本,请求图片时自动带上Accept:image/webp
字段。Android
手机QQ 5.5
版本开始支持该版本的内核。所以只要用户端下载该版本的TBS
内核,即可支持。
根据最新的数据, 手Q 5.5+
的覆盖率已经达到80%
以上,手Q上TBS
的覆盖率也是逐渐攀升,九月份已经达到70%以上(下图为TBS覆盖率,蓝色部分为TBS占比)。
不支持修改Accept
头怎么办?
对于支持webp
的域名&
目录,在同步jpg/png
文件到cdn
源站的时候,就会自动生成一张对应的webp
文件,例如:
原图:http://imgcache.qq.com/club/client/card/rel/img/default.jpg
webp
图:http://imgcache.qq.com/club/client/card/rel/img/default.jpg.webp
所以当无法修改请求头时,则可以由js
来做能力检测,检测出不支持则访问原图,检测出支持则在原图文件名后面加上.webp
就可以拉取webp
图片啦~
不想用webp怎么办?
只需要在图片链接后面加上一个nowebp
参数,不管accept
是什么内容,cdn
都会返回原图。
附:微信图文接入WebP
目前微信Webview打开的图片,如果图片URL带上参数tp=webp,则Accept会带上image/webp。
用户在公众平台编辑图文上传图片后,CDN会存储缩略图及大图,通过/640 及 /0访问,并没有生成WebP格式的图片。
当有用户请求WebP格式的图片,而CDN没有存储时,会返回如jpg格式的图的同时生成WebP格式图片,当再有请求时返回。
微信图文在打开时,图片是滚动加载的,所以JS能判断当前浏览器是否支持WebP格式的图片,是否加上tp=webp参数。
参考自:km
你好,请问你这个文章是2016年10月19日写的么 之后文章内容有没有更改过啊,这个时间对我很重要,拜托你解答一下啊
http://www.co3d.cn/ 三维扫描仪
思路很不错啊~
营养文章,帮顶了哦。。。。。。