我正在使用SDWebImage在我的iOS应用中加载图片,现在我想使用webp格式。
这是我的第一次尝试:
NSURL *url = [NSURL URLWithString:@"http://www.gstatic.com/webp/gallery/2.webp"];
[self.imageView setImageWithURL:url
placeholderImage:nil
options:SDWebImageProgressiveDownload
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
if (error) {
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[av show];
}
}];
如果图像是jpeg(我尝试过),但是使用webp,它会完美地工作。 我第一次调用此代码的错误是:
Downloaded image has 0 pixels
然后错误变为:
The operation couldn't be completed. (NSURLErrorDomain error -1100.)
怎么了?
答案 0 :(得分:9)
实际上上面的代码应该可以工作,但默认情况下会在库中禁用webp支持。
在sdwebimage目标的预处理器宏中添加SD_WEBP=1
(在构建设置中)将启用webp支持
答案 1 :(得分:9)
添加
pod 'SDWebImage/WebP'
进入podfile,然后点击pod install。 Cocoapods也会照顾预处理器标志。
来自SDWebImage github page
现在有3个子规格:Core,MapKit和WebP(这意味着 您只能安装一些SDWebImage模块。默认情况下,你 只获得Core,所以如果你需要WebP,你需要指定它。)
答案 2 :(得分:4)
我搜索了很多帖子,最终导致了这里。 在github中询问后,这是我的解决方案。
https://github.com/rs/SDWebImage/issues/1122
步骤:
Clone
并添加WebP.framework
使用git clone --recursive https://github.com/rs/SDWebImage.git
将SDWebImage
和WebP.framework
的完整文件夹添加到您的项目中。
Build Settings
- Preprocessor Macros
中,添加SD_WEBP=1
。
ps:如果使用CocoaPods
,我不知道如何将WebP.framework
添加到SDWebImage
,所以我选择将文件添加到我的项目中。
答案 3 :(得分:0)
Swift 5和Xcode 11
在podfile中使用pod
pod 'SDWebImageWebPCoder'
//import this Library
import SDWebImageWebPCoder
//use this code under AppDelegate 'didFinishLaunchingWithOptions'
let WebPCoder = SDImageWebPCoder.shared
SDImageCodersManager.shared.addCoder(WebPCoder)
//use this code under ViewController 'viewDidLoad'
//inside class
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
//load from server
let onlineFileUrl = URL(string: "http://www.gstatic.com/webp/gallery/2.webp")
//load from project directory
let loaclFileUrl = Bundle.main.url(forResource: "2", withExtension: "webp")
DispatchQueue.main.async {
self.imageView.sd_setImage(with: onlineFileUrl)
}
}
答案 4 :(得分:0)
Objective-C
在podfile中使用pod
pod 'SDWebImageWebPCoder'
导入此库
#import <SDWebImageWebPCoder.h>
在AppDelegate'didFinishLaunchingWithOptions'下使用此代码
SDImageWebPCoder *WebPCoder = [SDImageWebPCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:WebPCoder];
下载图片
[self.yourImage sd_setImageWithURL:[NSURL URLWithString:@"your_url_webp" placeholderImage:[UIImage imageNamed:@"placeholder"]];