zoukankan      html  css  js  c++  java
  • WebP探索

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

    DEMO下载

    参考:
  • 相关阅读:
    多层开发的小知识
    DIV+CSS基础教程:导航条的制作详解
    JavaScript函数
    css:学习CSS了解单位em和px的区别
    blank开新窗口为什么通不过W3C验证
    对javascript匿名函数的理解(透彻版)
    .net如何与windows身份验证的sql数据库连接
    Aptana2.0系列教程
    C# Tostring() 格式大全
    类关系图
  • 原文地址:https://www.cnblogs.com/jiujiaoyangkang/p/5849611.html
Copyright © 2011-2022 走看看