不同场景下WebP的使用方案总结:
 
  • App:Android4.0以上提供原生支持,其他版本使用官方提供的解析库(AndroidiOS);
 
  • 浏览器:JS能力检测,对支持 WebP 的用户输出 WebP 图片;使用WebpJS检测浏览器或webview是否支持,此插件我自己测试只有win下chrome能用,其他均存在问题
 
 
  • 手淘方案:目前手淘Android和iOS App中是支持的WebP的,采用解析库。iOS中webview本身是不支持WebP格式的,手淘中的实现是交给图片库来完成这部分工作(手淘是获取WebP格式文件然后转码成jpg给webview,我们现在是先进性判断再加载对应的图片)
 
  • 案例实战:
 ;(function(doc){
//判断是否支持WebP,测试了iPhone5s和坚果手机下的不同浏览器该判断方法可行
function checkWebp(){
try{
return (doc.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0);
//返回的是一串Base64编码的URL
//data:image/webp;base64,UklGRrgAAABXRUJQVlA4WAoAAAAQAAAAKwEAlQAAQUxQSBIAAAAB…kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99qwAAP7/1gAAAAAAAAAA
}
catch(err){
return false;
}
}
//获取class不依赖zepto
function getByClass(parent,cls){
if(parent.getElementsByClassName){
return parent.getElementsByClassName(cls);
}
else{
var res=[];
var reg=new RegExp(" "+cls+" ","i");
var ele=parent.getElementsByTagName("*");
for(var i=0;i<ele.length;i++){
if(reg.test(" "+ele[i].className+" ")){
res.push(ele[i]);
}
}
return res;
}
}
//改变带webp class的图片路径
function ChangeImg(sClass){
this.aImg = getByClass(doc,"webp");
this.oBar = checkWebp();
}
ChangeImg.prototype.test = function(){
//默认给html根节点加.normal
doc.documentElement.className = "normal";
if(this.oBar){
//支持webp则给html根节点加上support类名
doc.documentElement.className = "support";
for(var i = 0;i < this.aImg.length;i ++){
if(this.aImg[i].getAttribute("data-src")){
var dataSrc = this.aImg[i].getAttribute("data-src");
//获取images目录下图片的名字
var imgSrc = dataSrc.split("?")[0].split(".")[0].substring(6);
//images换成webp
var imgStr = "webp" + imgSrc + ".webp";
this.aImg[i].setAttribute("data-src",imgStr);
}
}
}
};
//通过webp class来判断是否需要webp格式图片
new ChangeImg("webp").test(); })(document);
  • 改进点:fis3下暂未发现有实时监听转换webp格式图片的插件,gulp有,目前可以通过智图网页版或客户端进行批量转换,一步到位;iOS下App不支持WebP,需要iOS同学进行相关的处理;其他一些问题等待大家去探索发现...

DEMO下载

参考:

WebP探索的更多相关文章

  1. webp技术探索

    不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得 ...

  2. webp图片详解

    WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使 ...

  3. Google最新的图片格式WEBP全面解析

    前言 不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值 ...

  4. 关于webp图片格式初探

    前言 不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值 ...

  5. FPGA加速:面向数据中心和云服务的探索和实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由columneditor 发表于云+社区专栏 作者介绍:章恒--腾讯云FPGA专家,目前在腾讯架构平台部负责FPGA云的研发工作,探索 ...

  6. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

  7. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  8. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  9. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

随机推荐

  1. C# 字节数组拼接的速度实验(Array.copy(),Buffer.BlockCopy(),Contact())

    无聊做了如题的一个算法的优劣性能比较,由于很多人都只关心结果,那么我先贴出结果如下: 由于我的测试数据量比较小,只能得出Array.Copy()和Buffer.BlockCopy()方法性能要好于Co ...

  2. Smart Battery Specification Revision 1.1

    1.SBS Specifications 2.System Management Bus (SMBus) Specification

  3. 并发insert情况下数据重复插入问题的解决方案

    背景介绍 通常我们在接口里要保存一条数据时,会先判断该条记录在数据库里是否存在,如果不存在就插入,如果存在就返回已经存在. 就拿常见的工单来举例 Order order = orderService. ...

  4. redis客户端连接,最大连接数查询与设置

    ##redis客户端连接数 redis通过监听一个TCP端口或socket的方式接收来自客户端的连接, 当与客户端建立连接后,redis内部会进行如下操作:()客户端socket会被设置为非阻塞模式, ...

  5. SkipList跳跃表(Java实现)

    取自网络https://github.com/spratt/SkipList AbstractSortedSet.java package skiplist_m; /***************** ...

  6. eclipse中三大利器

    eclipse中两大利器: 首先说下用eclipse开发工具.进行java代码,开发的时候,我们开发完成以后.需要测试.大部分我们用Junit测试工具.可是内部的代码覆盖率.和结构我们看的不是那么详细 ...

  7. python读写数据篇

    一.读写数据1.读数据 #使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件.file_object = open('thefi ...

  8. Android开发:LocationManager获取经纬度及定位过程(附demo)

    在Android开发其中.常常须要用到定位功能,尤其是依赖于地理位置功能的应用.非常多人喜欢使用百度地图,高德地图提供的sdk.开放API,可是在只须要经纬度,或者城市,街道地址等信息.并不须要提供预 ...

  9. 点击textbox弹出对话框,返回弹出对话框的值

    主要是在父页面使用 function PopupWindow() {            window.open(url, "", "status=no,resizab ...

  10. webstorm vscode 常用设置

    webstorm常用的设置及操作图解 VS Code 新建vue文件初始化模板 VSCode新建vue文件自定义模板