如何使用SDWebImage加载webp图像?

时间:2013-08-02 08:47:34

标签: ios sdwebimage webp

我正在使用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.)

怎么了?

5 个答案:

答案 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

步骤:

1:Clone并添加WebP.framework

使用git clone --recursive https://github.com/rs/SDWebImage.git

克隆存储库

SDWebImageWebP.framework的完整文件夹添加到您的项目中。

image

2:在Build Settings - Preprocessor Macros中,添加SD_WEBP=1

image

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"]];