iOS - 七牛/Ucloud 返回webp格式图片无法加载

最近公司打算把服务器返回的jpg格式的图片链接全部转化成webp格式的。由于SDWebImage本身支持webp加载的解析,所以转成webp对项目来说并不费时。但是后来服务器改了之后,页面上的图片死活显示不出来。以为是SD更改了解析方法,上网各种查资料,真是国内外翻遍,然而,并没有。。。。

把SDWebImage单独拖出来,搞出来测试。这次从网上找了一个webp格式的图片链接,顺便拿了一个后台返回的图片链接

  //UCloud  返回的webp格式图片链接
  NSString *ucloudWebpUrlStr  = @"https://**************.jpg?iopcmd=thumbnail&type=1&scale=50|iopcmd=convert&dst=webp&q=50";
   //网上真实的webp格式图片链接
    NSString *webpUrlstr    = @"https://github.com/samdutton/simpl/blob/master/picturetype/kittens.webp?raw=true";
  • 显示结果如图显示

    iOS - 七牛/Ucloud 返回webp格式图片无法加载_第1张图片

好吧,看来是格式的原因,初始我是怀疑Ucloud的返回webp格式是错误的。但是呢,如果是错误的他们应该早发现了。好吧,说事实:
七牛或者Ucloud返回的链接中包含有特殊符号:管道符“ | ”,这导致在转化成url的时候出错。需要对特殊符号转码一下:

    NSString *encodeStr = [ucloudWebpUrlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  • 结果正确显示

iOS - 七牛/Ucloud 返回webp格式图片无法加载_第2张图片

这样,就能很顺畅的显示出来了。但是每个用sd_setimage的时候可能都要编码一下,这是不爽的。后来打算让后台统一替换掉图片链接中的管道符号“ | ”,替换规则是:

将链接中的 “ | ” 替换成 “ %7C ” 。前端只需要让SDWebImage支持webp即可,代码不需要添加一行,结束。

OVER

你可能感兴趣的:(IOS)