4

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

怎么了?

4

5 回答 5

9

实际上上面的代码应该可以工作,但是库中默认禁用 webp 支持。

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

于 2013-08-04T14:27:54.327 回答
9

添加

pod 'SDWebImage/WebP'

进入您的 podfile,然后点击 pod install。Cocoapods 也会处理预处理器标志。

来自 SDWebImage github 页面

现在有 3 个子规范可用:Core、MapKit 和 WebP(这意味着您只能安装一些 SDWebImage 模块。默认情况下,您只获得 Core,因此如果您需要 WebP,则需要指定它)。

于 2015-11-20T21:16:16.030 回答
4

我搜索了许多最终导致这里的帖子。这是我在 github 中询问后的解决方案。

https://github.com/rs/SDWebImage/issues/1122

脚步:

1:Clone并添加WebP.framework

使用克隆存储库git clone --recursive https://github.com/rs/SDWebImage.git

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

图片

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

图片

ps:如果使用CocoaPods,我不知道如何添加,所以我选择将文件添加WebP.frameworkSDWebImage我的项目中。

于 2015-04-13T09:55:18.447 回答
4

斯威夫特 5 和 Xcode 11

在 podfile 中使用 pod

pod 'SDWebImageWebPCoder'

导入此库

import SDWebImageWebPCoder

在 AppDelegate 'didFinishLaunchingWithOptions' 下使用此代码

let WebPCoder = SDImageWebPCoder.shared
SDImageCodersManager.shared.addCoder(WebPCoder)

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

}
于 2019-09-28T06:04:35.703 回答
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"]];
于 2020-11-04T13:59:32.003 回答