WebP探索
- 浏览器: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同学进行相关的处理;其他一些问题等待大家去探索发现...
WebP探索的更多相关文章
- webp技术探索
不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得 ...
- webp图片详解
WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使 ...
- Google最新的图片格式WEBP全面解析
前言 不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值 ...
- 关于webp图片格式初探
前言 不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值 ...
- FPGA加速:面向数据中心和云服务的探索和实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由columneditor 发表于云+社区专栏 作者介绍:章恒--腾讯云FPGA专家,目前在腾讯架构平台部负责FPGA云的研发工作,探索 ...
- webp图片实践之路
最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
随机推荐
- Robot framework 引入 Selenium2Library 类库:
在用robotframework-selenium2library做web自动化测试时候,首先要将Selenium2Library导入到Test Suite中,在导入Selenium2Library时 ...
- syslog,rsyslog and syslog-ng
http://en.wikipedia.org/wiki/Syslog Syslog is a standard for computer message logging. It permits se ...
- Struts2学习二----------访问Servlet API
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2提供了三种方式去访问Servlet API -ActionContext -实现*Aware接口 -ServletActionConte ...
- jQuery--基础(查询标签)
浅谈jQuery使用背景 jQuery是使用原生js写成的一个库,使用简单,提高开发效率.在用js冗杂的代码解决的问题中,大部分都可以用jQuery来快速解决. 例如: js中查询网页中ID为&quo ...
- easyNetq demo
本demo包含一个类库,2个console程序 1.新建类库 MQHelper,控制台程序 consumer和proc ,控制台程序引用MQHelper 2.使用nuget安装easynwtq 和 ...
- 可执行Jar包调用动态链接库(DLL/SO)
踩过了很多的坑,查了很多资料,在此记录一下,以SpringBoot项目为基础. Maven加入JNA依赖 <!-- JNA start --> <dependency> < ...
- iOS开发入门
https://github.com/qinjx/30min_guides/blob/master/ios.md 任何C源程序,不经修改,即可通过Objective-C编译器成功编译 Objectiv ...
- 微信小程序页面之间的跳转
一.使用标签跳转 index.wxml: 在index.wxml页面添加一个<navigator>元素,在元素里面使用属性url就可以 二. ...
- Unix环境高级编程—进程控制(三)
一.解释器文件 解释器文件属于文本文件,起始行形式为: #! pathname[optional-argument] 我们创建一个只有一行的文件如下: #!/home/webber/test/echo ...
- 在非OnPaint里应该使用ClientDC来画图
import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__( ...