客户端优化之使用WebP图片

前言

在移动端,图片一直是流量大头,一些商品列表和详情等页面,图片大小动不动就以几百K,当然在某些比较大的公司会根据具体情况去加载相应尺寸的图片,这就意味着服务器必须提供多套尺寸的图片。而对传统的JPEG、PNG 和 GIF 这些图片格式的优化几乎已经达到了极致,而 Google在这个时候给了开发者一个新选择:WebP。在Google 的明星产品如 Youtube、Gmail、Google Play 中都可以看到 WebP 的身影,而 Chrome 网上商店甚至已完全使用了 WebP。国外公司如 Facebook、ebay 和国内公司如腾讯、淘宝、美团等也早已尝鲜。目前 WebP 也在我厂很多的项目中得到应用,如腾讯新闻客户端、腾讯网、QQ空间等。在2015年的时候,笔者曾经工作过的公司开始大规模使用WebP。
目前浏览器支持情况:

webP

WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。据谷歌官方的介绍:

  • WebP 无损压缩的图片可以比同样大小的 PNG 小 26%;
  • WebP 有损压缩的图片可以比同样大小的 JPEG 小 25-34%;
  • WebP 支持无损的透明图层通道,代价只需增加 22% 的字节存储空间;
  • WebP 有损透明图像可以比同样大小的 PNG 图像小3倍。

WebP使用

目前前端客户端基本都支持WebP图片格式,关于WebP格式的图片和其他图片格式的比较,直接看图例介绍:https://isparta.github.io/compare-webp/index.html#12345
下面分别介绍使用方法。

html

<body>
     <img src="" alt="" data-url="11.jpg" data-original="11.webp"/>
     <img src="" alt="" data-url="21.jpg" data-original="21.webp"/>
</body>

js

var userAgent = navigator.userAgent;
    var Android = userAgent.indexOf("Android");
    var AppleWebKit=userAgent.indexOf('AppleWebKit');
    var androidVersion = parseFloat(userAgent.slice(Android+8));
    var $img=document.getElementsByTagName('img');
    window.onload= function () {
        if(Android >= 0 && AppleWebKit>=0&&androidVersion>=4){
            forImg('data-original');
        }else{
            forImg('data-url');
        }
    }
    function forImg(data){
        for(var i=0;i<$img.length;i++){
            $img[i].setAttribute('src',$img[i].getAttribute(data));
        }
    }

Android

Android很早之前就支持WebP图片格式,可以直接使用ImageView组件即可加载。

iOS

今天重点要说的就是iOS平台怎么添加加载WebP格式的图片。由于OS X不支持原生WebP解码,所以,可以先安装一个工具。打开Homebrew,输入如下命令:

brew install webp

目前iOS的图片加载框架SDWebImage里面有个webP 框架,可以支持WebP的图片格式。SDWebImage 可以直接转换为UIImage 即可使用。

google webP官网下载最新webP代码选择其中的iOS开头的文件,mac的话需要自己生成framewok,找到对应的版本下载即可;

  1. SDWebImage中加载webp格式的图片时需要定义SD_WEBP=1的宏,为了方便,我直接将SDWebImage库拖到项目中。
  2. target->build setting->搜索preprocessor 添加SD_WEBP=1

    添加后整体项目结构如下:
  3. 使用UIImageView加载网络WebP格式图片,并在info.list中增加网络访问的权限(依次选择App Transport Security Settings 增加 Allow Arbitrary Loads即可);
    相关代码如下:
UIImageView * testImage = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    [testImage sd_setImageWithURL:[NSURL URLWithString:@"https://isparta.github.io/compare-webp/image/png_webp/webp_lossless/1.webp"]];
    //    testImage.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:testImage];

运行效果:

时间: 2024-08-30 11:43:06

客户端优化之使用WebP图片的相关文章

提升网站用户体验—WebP 图片的高效使用

一.WebP 的由来 现代图像压缩技术对我们的生活方式影响很大.数码相机能将上千张高质量图片存储到一张内存卡里.智能手机可以与邻近设备快速分享高分辨率的图片.网站与手机等移动设备能快速展示各种富媒体. 然而,如果图片只能以最原始的格式进行存储的话,以上所有都只是纸上空谈. 在 APP.浏览器或 PC 端.还是移动端等各种设备里,通常使用 JPEG 这种损耗较大的格式对图片进行高效率的管理,而使用 PNG 这种失真较小的格式传送图表.图标以及图画等. 然而,在过去几年间,尽管视频的格式发展迅速,图

关于webp图片格式初探

前言 不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得探索的事情. 但如今对于 JPEG.PNG 和 GIF 这些图片格式的优化几乎已经达到了极致, 若想改变现状开辟新局面,便要有釜底抽薪的胆量和气魄,而 Google 给了我们一个新选择:WebP. 对 WebP 的研究缘起于手机 QQ 原创表情商城,由于表情包体积较大,在 2G/3G 的网络环

android-关于webp图片格式在Android中的应用

问题描述 关于webp图片格式在Android中的应用 我现在在做一个类似壁纸的应用,app获取服务端图片展示,有一半图片是webp格式.我们提供下载和分享功能.但是webp图片下载到手机本地不能打开,同时分享webp图片都会出错.求助,该怎么解决.是要把服务端的图片格式都转换为jpg或者png吗?有代码能实现转换吗 解决方案 Android优化-webp图片格式 解决方案二: 你的参考答案在哪啊? 解决方案三: app端的图片格式一般都是**Jpg**和**png**的. 没有用webp的.

用Google WebP图片格式控制网站页面大小

  不管你相信或者不相信,随着互联网的快速发展网页也在持续不断的变大. 使网页迅速膨胀的罪魁祸首不是大量使用的JavaScript库,CSS和无尽的共享按钮,而是精美的图片.根据HTTPArchive的研究,图 片大约占据了页面内容的60%.这意味着,大部分网站可以通过压缩图片来减小页面本身大小.如果大家有兴趣了解HTTPArchive的研究及其如何优化 网页加载速度,推荐阅读gbin1过去发布的文章 -分享网页加载速度优化的一些技巧? 其中一种有效的压缩图片的方法就是使用Google的WebP

Android WebP 图片压缩与传输_Android

1. 简介 直到4g时代,流量依然是宝贵的东西.而移动网络传输中,最占流量的一种载体:图片,成为了我们移动开发者不得不关注的一个问题. 我们关注的问题,无非是图片体积和质量如何达到一个比较和谐的平衡,希望得到质量不错的图片同时体积还不能太大. 走在时代前列的谷歌给出了一个不错的答案--WebP. WebP是一种图片文件格式,在相同的压缩指标下,webp的有损压缩能比jpg小 25-34%.而在我自己的测试里,有时候能小50%. 2. 大企业背书 WebP在2010年发布第一个版本,到现在已经6年

格式 webp-谷歌的webp图片格式如何在windows下使用java转换成其他格式

问题描述 谷歌的webp图片格式如何在windows下使用java转换成其他格式 参考了http://blog.csdn.net/geeklei/article/details/41147479,可以在linux下成功执行,但是在windows下编译出dll和jar始终无法正确运行java.lang.IllegalArgumentException: image == null!无法识别这样的图片格式 解决方案 Java webp转jpg webp是最近google推出的新的图片格式 googl

在 Ubuntu Linux 中使用 WebP 图片

什么是 WebP? 自从 Google 推出 WebP 图片格式,已经过去五年了.Google 说,WebP 提供有损和无损压缩,相比 JPEG 压缩,WebP 压缩文件大小,能更小约 25%. Google 的目标是让 WebP 成为 web 图片的新标准,但是并没有成为现实.已经五年过去了,除了谷歌的生态系统以外它仍未被接受成为一个标准.但正如我们所知的,Google 对它的技术很有进取心.几个月前 Google 将 Google Plus 的所有图片改为了 WebP 格式. 如果你用 Go

c# 客户端 调用 java Webservice 实现图片上传功能

问题描述 c# 客户端 调用 java Webservice 实现图片上传功能 no SOAPAction header c#端添加服务引用 生成实体类 直接调用webservice图片上传方法 结果报错**no SOAPAction header** 解决方案 有没有大神 来帮帮忙 解决方案二: 参考这个:http://blog.csdn.net/wxyong3/article/details/38727503

在javaweb项目中 我要遍历项目中的产品图片,但是数据库访问的是URL,优化ftp上的图片

问题描述 在javaweb项目中 我要遍历项目中的产品图片,但是数据库访问的是URL,优化ftp上的图片 在javaweb项目中 我要遍历项目中的产品图片,但是数据库访问的是URL,我现在想优化这些图片,从ftp上遍历的时候就直接给图片压缩,只减少图片的KB,但是不能减少尺寸. 这样的需求 我该如何用java代码实现啊 求教育啊!!! 解决方案 没有必要,你的web server开启gzip压缩就可以了.效果差不多,不用任何代码. 解决方案二: http://www.mycodes.net/78