Safari 14.0 的功臣 Webp?
俗话说:一图胜千言。在网上,图片虽然可以让用户更加简单明了地看到更多信息,但是图片体积也可以抵过上千字节甚至更多。研究表明,打开一个 HTTP 网页,其中图片平均占比为 64%。在图片占比如此高的情况下,用户对图片的体积就有非常高的要求了。
我们可以通过图片压缩的方式来缩小图片体积。但是要如何保证图片体积缩小的同时而不大幅降低图片质量呢?传统的图片格式,如 JPEG,PNG,GIF 等格式图片已经没有太多的优化空间,而 Google 于 2010 年推出 WebP 图像格式。WebP 图像在相同素质下,比 JPG 体积小 25-34%,比 PNG 则小 26%,并且,WebP 更可以做到动态 GIF 的部分功能,也支持透明化及失真,无失真压缩等模式。
市面上的浏览器,例如 Chrome,Firefox,Microsoft Edge 都已经支持 WebP,随着 iOS 14 以及 macOS Big Sur 的发布,在 WebP 发布的 11 年后,苹果终于跟进,Safari 开始支持 WebP。至此,主流浏览器均已正式支持 WebP 格式,相信今后 WebP 会获得更为广泛的部署和支持。

WebP 的由来
WebP 的诞生起初是因为 Google 开发了一种基于 VP8 视频编码格式的 WebM 视频格式,Google 的工程师意识到 WebM 格式非常适合压缩关键帧,由此开发了 WebP 图片格式。
WebP 主要目标是使图片质量和 JPEG 格式质量相同的情况下,减少图片文件的体积,从而减少互联网上图片的发送时间和流量消耗。发布不久之后,WebP 便被整合到 Chrome 以及 Android 系统中,并且 Google 发布了函数库,让 iOS 应用等其他平台支持 WebP 格式。
相较于 JPEG 只能提供有损压缩,WebP 同时提供有损压缩和无损压缩:
有损 WebP 压缩使用的图像编码方式与 VP8 视频编解码器中压缩视频关键帧的方法相同。利用图像已编码部分预测未编码部分,将图像细分来进行预测处理,分块越细预测越准确。获取编码数值后将原图像数据减去预测数据得到差值,仅对差值进行编码,以此控制大小;
无损 WebP 压缩使用已知的图像片段来精确地重建新的像素,在无法找到相应的匹配值的情况下,使用本地调色板进行优化。
WebP 的压缩效果
与其他图片格式相比,WebP 集合了多种图片文件格式的优点。它可以像 JPEG 一样适合压缩照片和其他细节丰富的图片,或者像 GIF 一样显示动态图片,又或者像 PNG 一样支持透明图像。根据 Google 的测试,WebP 无损压缩图片比 PNG 图片少了 45% 的文件体积,即使这些 PNG 图片在使用 pngcrush 和 PNGOUT 处理后,WebP 依旧可以减少 28% 的文件体积。

同等质量下得到体积更小的图片,这也是 WebP 的意义。通过压缩图片体积来降低带宽的消耗,为线上服务降低流量成本,更快的展示和更短的图像共享时间,为网站及移动应用用户带去更好的用户体验。像淘宝、京东这类有着大量商品图片的电商网站,或者如花瓣、unsplash 等图库业务,都已经开始使用 WebP 来提高页面加载速度。

在项目中使用 WebP
既然 WebP 有这么多优势,并且浏览器平台基本都已经支持,那如何在项目中部署 WebP 呢?
我们可以先使用 webpack、gulp 等插件来批量转换出一批 WebP 图片格式的图片,然后在前端使用 标签,在访问端支持 WebP 的情况下,实现自动加载 WebP 格式的图片。
<picture class="picture">
<source type="image/webp" srcset="image.webp">
<img class="image" src="data:image.jpg">
</picture>
如果浏览器支持WebP格式,就会加载image.webp,否则会加载image.jpg。
又或者,我们有很多的页面往往会用到图片的“懒加载”——通常是把图片的 URL 放在 img 元素的一个自定义属性中,然后用 JS 在适当的时机将 URL 赋值给 src 属性。用类似的原理,我们可以根据浏览器是否支持 WebP 格式,给 img 元素赋予不同的 src 值,例如下方的伪代码。
$('[data-url]').each(function(item, index){
var ext = window.__supportWebP__ ? '.webp' : ''
$(this).attr('src', $(this).attr('data-url') + ext)
})
以上都是常见的一些项目改造实现使用 WebP 的操作方法。但是这类改造都要涉及到代码改造、项目重新部署,那么有没有更加优雅、更加快捷的方式,来使自己的网页快速用上 WebP 呢?
又拍云目前已经支持 WebP 图片格式转换,而且还支持 WebP 自适应功能。在又拍云后台一键开启 WebP 自适应功能,即可通过 CDN 平台智能判断客户端浏览器是否支持 WebP 解码,如果支持则返回 WebP 格式图片,如果不支持则会返回原图,在客户端以及源站无需任何改动。

在我们的实践中,使用了 WebP 格式后,图片的体积普遍缩小了 1/3 以上,既加快了网页/App 的加载速度,节省了带宽访问流量,也让用户流畅丝滑的访问体验更上一层楼。我们也做了一个 WebP 的压缩效果体验页面,您也可以来快速体验 WebP 的神奇魔力
推荐阅读
Safari 14.0 的功臣 Webp?的更多相关文章
- Nginx1.14.0+ModSecurity实现简单的WAF
一.编译安装Nginx 1.安装依赖环境 $ yum -y install gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel ...
- pip安装pycrypto报错:Microsoft Visual C++ 14.0 is required. 和 SSLError: HTTPSConnectionPool的解决办法
今天本打算把[Python3爬虫]网易云音乐爬虫 的代码敲一遍, 但是在安装pycrypto老是报错, 由于我计算是win10, 并且也有vs2017 python3环境下安装pycrypto的一些问 ...
- 无法解决“Microsoft.SharePoint.Security, Version=15.0.0.0,”与“Microsoft.SharePoint.Security, Version=14.0.0.0”之间的冲突
VisualStudio 2013创建控制台项目,.NetFramework选为4.5.生成目标平台:x64.然后添加对Microsoft.SharePoint.dll的引用. 生成项目时," ...
- 安装InfoPath 2013后 SharePoint 2010 出现 “找不到 Microsoft.Office.InfoPath, Version=14.0.0....” 的错误的解决方案
1. 症状 您的SharePoint 2010的服务器是不是最近一直出现这个错误呢? Could not load file or assembly 'Microsoft.Office.InfoPat ...
- VS2010 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0@VCTargetPath处的属性表达式
VS2010打开.csproj工程文件报错,不能加载,错误信息如下: 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\1 ...
- EDS 14.0 dtc:commmand not found
EDS 14.0在生成dtb文件时,输入命令: dtc -I dts -O dtb -o soc_system.dtb soc_system.dts 出现错误: bash:dtc:command on ...
- Could not load file or assembly 'Microsoft.Office.Interop.Word, Version=14.0
参考地址一:点击这里 参考地址二:点击这里 解决方法: 使用office COM元件,电脑里必须要有相对应的版本,比如 Excel 14.0是对应Excel 2010 Excel 12.0是对应Exc ...
- Adobe Photoshop CC 14.0简体中文特别版32位和64位下载
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Ubuntu 14.0操作系统,修改默认打开方式的方法
Ubuntu 14.0 有内置的视频播放器 Totem,但是使用起来不太习惯,所以在系统的软件中心 下载了gnome Mplayer和s Mplayer,都有打开上次播放的忆功能,只是gnome Mp ...
- Mindjet.MindManager“参数错误”解决办法,适用于9.0、10.0和14.0
MindManager出14.0版本了,但是在应用个别模板的时候会提示“参数错误”,然后自动关闭. 解决办法: 如果是win7系统,可以进入C:\Users\(用户名) \AppData\Loca ...
随机推荐
- GPTs破冰硅基文明社会
GPTs破冰硅基文明社会 渐进是技术革命的常态 技术革命看似一夕之间就颠覆了世界,但实际上每项重大技术进步的背后,都经历了漫长的渐进积累.以蒸汽机为例,最初动力微弱.效率低下,需要大量工程师跟车维护, ...
- 升级到 Pulsar3.0 后深入了解 JWT 鉴权
背景 最近在测试将 Pulsar 2.11.2 升级到 3.0.1的过程中碰到一个鉴权问题,正好借着这个问题充分了解下 Pulsar 的鉴权机制是如何运转的. Pulsar 支持 Namespace/ ...
- 🔥🔥Java开发者的Python快速进修指南:面向对象基础
当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升.不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性.它使用了一些独特的关键字,如sel ...
- 光学测量 PPG
参考来源:ADI官网技术文章.知乎(hxl695822705.KingPo-张超.深圳加1健康科技 ) 现状 PPG测量心率.血氧的技术距今发展快100年,影响心率.血氧测量准确度的因素主要有心率传感 ...
- 通过 VS Code 优雅地编辑 Pod 内的代码(非 NodePort)
目录 1. 概述 2. NodePort 方式 3. Ingress 方式 4. 救命稻草 5. 其他 1. 概述 今天聊点啥呢,话说,你有没有想过怎样用 VS Code 连上 K8s 集群内的某个 ...
- NLP复习之向量语义
向量语义 词汇语义 语义概念(sense or concept)是单词含义(word sense)的组成部分,词原型可以是多义的. 同义词是指:在某些或者全部的上下文中,单词之间有相同或近似含义 可能 ...
- python 获取android 应用使用情况
python 获取android 应用使用情况 本文主要讲述python 脚本获取android 应用使用情况. 主要思路:使用adb 获取当前activity ,1s 一次输出. 主要涉及知识点: ...
- 从零玩转QQ登录-clwzqqdlu
title: 从零玩转QQ登录 date: 2021-05-01 15:55:39.951 updated: 2023-03-30 13:29:03.865 url: https://www.yby6 ...
- Asp .Net Core 集成 FluentValidation 强类型验证规则库
目录 入门程序 安装 案例:登录 验证器 内置验证器 自定义验证器 编写自定义验证器 可重复使用的属性验证器 本地化 DI 自动验证 官网:https://docs.fluentvalidation. ...
- Hystrix:Spring Cloud服务熔断与降级组件
Hystrix:Spring Cloud服务熔断与降级组件 问题总结 熔断器? Spring Cloud Hystrix? Hystrix服务降级? 全局降级方法? 解耦降级逻辑? Hystrix服务 ...