WebP 可用性探测

webp 是目前 Web 比较流行的解决方案,相对于 Jpeg/png, 基于 VP8 的压缩,有着非常不错的压缩率。

WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index

比较基础的方法,还是检测 UA 白名单来说,毕竟这些版本都是很早就支持。

这个方法可控性大,而且能够支持 SSR 渲染,在服务端做 UA 判断然后输出对应的图片格式。

当然,常规的另外一种解决方式是,就是远程加载一张 webp 图片观测是否报错

1
2
3
4
5
6
7
8
function checkWebPSupport) {
return new Promise((resolve, reject) => {
var img = new Image();
img.onload = function() { resolve(); };
img.onerror = function() { reject(); };
img.src = 'http://www.gstatic.com/webp/gallery/1.webp';
})
}

网络上有一款比较创新的检测方法,利用 canvas 输出图像的方式。

1
2
3
4
5
6
7
8
9
function canUseWebP() {
var elem = document.createElement('canvas');

if (!!(elem.getContext && elem.getContext('2d'))) {
return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;
}

return false;
}

CSS 中嵌入的 背景图

1
2
3
4
5
6
7
.no-webp .elementWithBackgroundImage {
background-image: url("image.jpg");
}

.webp .elementWithBackgroundImage{
background-image: url("image.webp");
}

如果用到 背景图的话,我们可以通过跟元素的 class 来进行图片格式的选择

扩展阅读

  • https://stackoverflow.com/questions/5573096/detecting-webp-support
  • Using WebP Images
坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者: Leo
  • 本文链接: https://xuebin.me/posts/1f6ad7f6.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!