解决webp格式兼容性问题

webp格式的图片非常屌,见文章:https://yq.aliyun.com/articles/63830

可是,它有兼容性问题,目前我发现只有基于webkit内核的浏览器才支持,如果ie内核的浏览器打开,根本不会显示webp格式的图片。

那么如何解决这个问题呢?

首先,我想到的是用js判断是否支持webp格式图片,支持的就用webp,不支持的用原图。上代码:

function checkWebp() {
    try{
        return (document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0);
    }catch(err) {
        return  false;
    }
}

$(document).ready(function() {
    var webp_good = checkWebp();

    if(webp_good == false) {
        $('img').each(function() {
            var src = $(this).attr('src');
            if(typeof src != 'undefined') {
                src = src.replace('/format,webp', '/format,jpg');   //webp格式转换成jpg格式
                $(this).attr('src', src);
            }

            var original = $(this).attr('original');		//针对用了懒加载的情况
            if(typeof original != 'undefined') {
                original = original.replace('/format,webp', '/format,jpg');   //webp格式转换成jpg格式
                $(this).attr('original', original);
            }
        })
    }
})
用这种方式的确能够满足要求,在支持web的情况下用webp,不支持的时候换成了jpg。(ps:我用的是阿里云的oss,默认是显示webp图片)

但是,这种方案有两个问题:

1)IE下页面首先会显示一张破图,然后再显示成正确的图,体验效果不好

2)IE下虽然讲webp图片替换成了jpg,但是看网络请求可以发现,其实页面请求了两次,先请求了webp,再请求了jpg,反而浪费了宽带


果断抛弃这种方案。


方案二,根据header信息判断浏览器是否支持webp

accept头信息会告知浏览器能够识别哪些类型的文件,如下

查看google的accept:


查看ie的accept:


可以知道,google浏览器是支持webp的,ie不支持。

所以,可以在服务器端通过判断是否支持webp来显示对应的图片。

function get_thumb($url, $type = '', $width = 0, $height = 0, $format = 'webp')
{
    //oss图片
    if(strpos($url, 'http://static.jutubao.com') !== false || strpos($url, 'http://img.jutubao.com') !== false) {
        //判断客户端是否支持webp,不支持则改为jpg格式
        $accept = request()->header('accept');
        if(strpos($accept, 'image/webp') === false && $format == 'webp') {
            $format = 'jpg';
        }

        if(empty($width) && empty($height) && empty($type)) {   //更改图片格式
            $url .= '?x-oss-process=image/format,'.$format;
        } else {
            $url .= '?x-oss-process=image/resize,m_'.$type.',h_'.$height.',w_'.$width.'/format,'.$format;
        }
    }

    return $url;
}
ps:我这是tp5的代码,具体的代码根据实际情况做修改。


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WebP是一种新型的图片格式,由于其良好的压缩性能和快速的加载速度,正在逐渐被广泛应用。Isparta作为WebP格式的开发者,一般不会在WebP格式方面出现严重的错误或故障。 但是,如果WebP格式失败了,可能是由于以下原因: 1.文件格式错误:WebP格式可能会因文件格式错误而失败。比如说,文件大小超过WebP的最大文件限制,或者文件格式出现错误。 2.编码错误:编码错误可能导致WebP格式的失败,例如过度压缩或将其压缩到无法使用的级别。 3.软件或技术问题:WebP格式的失败可能与软件或技术问题有关。例如,可能存在某些不兼容的软件或技术问题,导致WebP格式無法正常運作。 总之,如果WebP格式失败了,需要您进一步排除问题原因并采取相应的解决措施。 ### 回答2: Isparta是一种用于图像压缩的格式,它与其他常见的格式(如JPEG和PNG)相比,具有更好的压缩比和更小的文件大小,因此在网页加载速度方面有很好的效果。其中包含了一种称为webp的变体,这种格式是由Google开发的,并被认为是一种更加现代化和高效的图像格式。 然而,尽管webp有很多优点,但在某些情况下也可能会出现失败的情况。其中一个常见的问题是浏览器的兼容性。尽管现代浏览器已经开始支持webp格式,但一些老旧的浏览器仍然无法读取这种格式,特别是在移动设备上的情况更加明显。 另一个可能的原因是webp格式的编码不够稳定。虽然webp的目标是提供高品质、高压缩比的图像,在某些情况下,压缩的过程可能导致图像出现质量问题或格式失效。场景包括对JPEG图像进行再压缩、处理低质量图像或者使用非常规方法进行压缩等。 总的来说,webp格式的失败可能是由于多方面的原因造成的,包括浏览器兼容性问题和编码不稳定性等。因此,在使用webp格式的时候,需要考虑到这些问题,并选择恰当的方法和工具进行处理,以确保图像显示质量的稳定性和兼容性

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值