关于SDWebImage加载webp格式图片异常问题

很久之前写的了,最近都统一发了。参考资料,解决问题,总结一下,作为学习

问题

webp 格式图片加载失败

方案

方案1

后端调整?。。。。

方案2

设置库加载图片的请求头

1:进入SDWebImageDownloader.m 可以看到库提供了请求头设置

sd_webp.png

所以,相应的配置一下即可

sd_webp_setting.png

2:另外一种方式是通过代码静态的设置库的请求头

didFinishLaunchingWithOptions中:

    [SDWebImageDownloader.sharedDownloader setValue:@"text/html,application/xhtml+xml,application/xml,image/webp,image/*,*/*;q=0.8"
                                 forHTTPHeaderField:@"Accept"];

关于这种方式设置请求头,解释一下:

  • Accept表示浏览器支持的 MIME 类型
  • value值即表示客户端请求服务端生成相应内容的类型
    • text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型);type 指定大的范围,subtype 是 type 中范围更明确的类型,即大类中的小类
    • Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
    • text/html表示 html 文档;
    • Application:用于传输应用程序数据或者二进制数据;
    • application/xhtml+xml表示 xhtml 文档;
    • application/xml表示 xml 文档
  • q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型
  • mimetype以逗号分割,越靠前,优先级越高

所以如上设置,图片格式设置了image/webp,表示服务端webp格式的图片不用强转了 ?

是不是设置请求头,服务端知道内容生成格式了?生成image/webp格式?

方案3

SDWebImage支持webp的,可以集成该库:pod 'SDWebImage/WebP',但是问题在于ios11.2之后webp格式的data无法解析为image呀,所以,就需要解决webp的data到image的解析问题

集成 webp

pod依赖库,个人习惯性的search一下,了解最新版本,homepage,source等信息。

pod search SDWebImage/WebP,发现没有搜索到,SDWebImage下没有webp的subspecs,但是pod install时候会发现,installing libwebp。所以,pod search libwebp 能搜索到,也能看到相关homepage,source等,发现libwebp是谷歌上的资源。所以,可能无法访问,会依赖失败

方法1:直接访问源地址

试一下,就算翻墙,可能也会访问错误的:
fatal: unable to access 'chromium.googlesource.com/webm/libweb…': Failed to connect to chromium.googlesource.com port 443: Operation timed out

所以,需要配置host,host列表,将host列表中的配置全部copy到host文件中,有点多,我也惊到了

方法2:更换pod资源地址

打开webp库的libwebp.podsepc.json文件

libwebp1.0.2.png
webpsource.png

看到source是https://chromium.googlesource.com/webm/libwebp,不通过一些手段是访问不到的

将source改为https://github.com/webmproject/libwebp.git再pod install即可。(能看到,libwebp.git是mirrored from 哪个的,就是上面那个)

注意:修改的是libwebp的source,所以,需要pod 'libwebp'来依赖,如果修改的是搜索出来的最高版本的source,默认安装的就是这个,如果修改的是较低版本的source,那么依赖时候,最好指定版本

webp.data > image

SDWebImage其实是支持webp格式的图片的,所以,11.2系统之前,集成过libwebp后,就可以直接正常加载webp格式的图片了。11.2之后的,webp图片的data无法解析得到image。

这一点,YYWebImage,YYImage支持WebP、APNG、GIF格式动画图像的播放/编码/解码

所以,可以将跟SDWebImage跟YYWebImage和YYImage结合一下

+ (UIImage *)imageWithWebPData:(NSData *)imgData error:(NSError **)error
{
    UIImage *webpImage = [YYImage imageWithData:imgData];
    return webpImage;
}

方法是重写SDWebImage的方法,,方法体处理是YYImage的解析处理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279