由于最近项目的需求,图片的加载需要对webp格式的图片做兼容,但是ios是不支持webp格式的原生支持的,对于webp格式的图片需要经过处理才能支持。在网上搜了一些方法,发现都不是很全面,因此完成项目修改之后,将用到的几篇好文章结合了起来~~~
实际上SDWebImage中已经支持了webp格式的图片,可以在UIImage与WebP之间进行图片的相互转换,所以对于iOS端的WebP格式图片的支持可以通过SDWebImage/WebP来支持处理,但是11.2以上的系统就无法解析Data了。
一、首先:
可以通过pod 'SDWebImage/WebP'来进行安装。但是安装可能会出现一些问题:在执行pod install后
终端提示Error installing libwebp.这是由于Pods提供的libwebp的资源地址无法连接,
最简单有效的修改方式就是修改libwebp的资源地址,再执行pod install即可解决。
在GitHub上找到了一个https://github.com/webmproject/libwebp.git,可以看到mirrored from https://chromium.googlesource.com/webm/libwebp,便用pod版本对应的地址来替换原资源地址.
终端依次执行下面前三行命令,获得libwebp版本文件文件夹
pod repo #查看 cocoapods 本地库路径
find xxx -iname libwebp #在本地库中找到libwebp版本文件文件夹路径 xxx是根据上个步骤查看到的路径
cd xxx #进入libwebp版本文件文件夹
ls -l #查看所支持的版本
前往libwebp版本文件文件夹,找到对应的版本文件夹
打开libwebp.podspec.json文件,并修改文件中source的值为https://github.com/webmproject/libwebp.git
终端重新进入工程文件夹下执行pod install即可
二、查看UIImage+WebP.m中解析源码发现,iOS11.1这方法能正常解析Data为image,但iOS11.2这个方法就无法解析Data了,推荐结合YYWebImage,YYImage支持WebP、APNG、GIF格式动画图像的播放/编码/解码。
要最小代价的修复问题,只需要重写上面那个解析方法将WebP的data转换成UIImage并返回就行了。
YYImage.h有方法“+ (nullable YYImage *)imageWithData:(NSData *)data;”。
那么导入项目重写方法WebP无法展示的问题就得到了解决。
+ (UIImage *)imageWithWebPData:(NSData *)imgData error:(NSError **)error
{
UIImage *webpImage = [YYImage imageWithData:imgData];
return webpImage;
}
文章摘自于网络,如有侵权敬请谅解哟,继续做个好的搬运工~