ios wkweb设置图片_在iOS中使用WKWebView如何支持展示webp格式图片(包括本地html)?...

频繁有客人反馈我们图片在某些地区如:意大利 反馈我们APP图片展示太慢,印象客人下单体验,于是我们开始着手分析。因为我们是混合开发项目,首选确定了iOS不支持,安卓系统4.x以上天然支持不需要处理。目前,后端给前段传递了图片的原始链接,前段根据不同页面展示需要,动态调整参数。 例如:其中粗体部分的两个参数,可以极大的影响图片数据包大小:在quality不变的情况下,只调整format,从jpg改为...
摘要由CSDN通过智能技术生成

频繁有客人反馈我们图片在某些地区如:意大利 反馈我们APP图片展示太慢,印象客人下单体验,于是我们开始着手分析。因为我们是混合开发项目,首选确定了iOS不支持,安卓系统4.x以上天然支持不需要处理。

目前,后端给前段传递了图片的原始链接,前段根据不同页面展示需要,动态调整参数。 例如:

其中粗体部分的两个参数,可以极大的影响图片数据包大小:在quality不变的情况下,只调整format,从jpg改为webp大概能达到数据包减1/3~1/2的效果,视觉质量没有明显变化

如果在format不变的情况下,调整quality从100降低到90,大概能达到数据包减1/3~1/2的效果,视觉质量没有明显变化

两者同时调整,大概能达到数据包减2/3左右的效果,视觉质量没有明显变化

一番查阅资料

参考了一些deme发现只能拦截http式的webView,对应加载本地html的方式就无法加载处理,笔者在两者基础上修改实现完成对本地html的支持

其实现展示webp格式的原理是:

[NSURLProtocol registerClass:[HybridNSURLProtocol class]];

对APP发起的所有请求进行拦截,并进行重定向

+ (BOOL)canInitWithRequest:(NSURLRequest *)request

{

NSLog(@"request.URL.absoluteString = %@",request.URL.absoluteString);

NSString *scheme = [[request URL] scheme];

if ( ([scheme caseInsensitiveCompare:@"http"] == NSOrderedSame ||

[scheme caseInsensitiveCompare:@"https"] == NSOrderedSame ))

{

//看看是否已经处理过了,防止无限循环

if ([NSURLProtocol propertyForKey:KHybridNSURLProtocolHKey inRequest:request])

return NO;

return YES;

}

return NO;

}

加载完成后

/**

* 加载完毕

*/

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

if ([connection.currentRequest.URL.absoluteString hasSuffix:@"webp"]) {

NSData *imageData = self.recData;

UIImage *image = [UIImage sd_imageWithWebPData:self.recData];

imageData = UIImagePNGRepresentation(image);

if (!imageData) {

imageData = UIImageJPEGRepresentation(image, 1);

}

[self.client URLProtocol:self didLoadData:imageData];

[self.client URLProtocolDidFinishLoading:self];

}

}

以下是具体代码:

NSURLProtocol+WKWebVIew.h 文件

#import

@interface NSURLProtocol (WKWebVIew)

+ (void)wk_registerScheme:(NSString*)scheme;

+ (void)wk_unregisterScheme:(NSString*)scheme;

@end

NSURLProtocol+WKWebVIew.m 文件

#import "NSURLP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值