如何使用SDWebImage加载webp图像?

Ale*_*xis 3 ios webp sdwebimage

我正在使用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];
     }
 }];
Run Code Online (Sandbox Code Playgroud)

如果图像是jpeg(我尝试过),但是使用webp,它会完美地工作.我第一次调用此代码的错误是:

Downloaded image has 0 pixels
Run Code Online (Sandbox Code Playgroud)

然后错误变为:

The operation couldn't be completed. (NSURLErrorDomain error -1100.)
Run Code Online (Sandbox Code Playgroud)

怎么了?

Ale*_*xis 9

实际上上面的代码应该可以工作,但默认情况下在库中禁用webp支持.

添加SD_WEBP=1sdwebimage目标的预处理器宏(在构建设置中)将启用webp支持


Qam*_*man 9

pod 'SDWebImage/WebP'
Run Code Online (Sandbox Code Playgroud)

进入你的podfile,然后点击pod install.Cocoapods也会照顾预处理器标志.

来自SDWebImage github页面

现在有3个子规格可用:Core,MapKit和WebP(这意味着你只能安装一些SDWebImage模块.默认情况下,你只需要Core,所以如果你需要WebP,你需要指定它).


Zai*_*jum 6

Swift 5 和 Xcode 11

在 podfile 中使用 pod

pod 'SDWebImageWebPCoder'
Run Code Online (Sandbox Code Playgroud)

导入这个库

import SDWebImageWebPCoder
Run Code Online (Sandbox Code Playgroud)

在 AppDelegate 'didFinishLaunchingWithOptions' 下使用此代码

let WebPCoder = SDImageWebPCoder.shared
SDImageCodersManager.shared.addCoder(WebPCoder)
Run Code Online (Sandbox Code Playgroud)

在 ViewController 'viewDidLoad' 下使用此代码

@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)
    }

}
Run Code Online (Sandbox Code Playgroud)