如何使用SDWebImage加载webp格式的图片?

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.)

什么问题?
5个回答

10

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

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


你能发布一个源代码,演示如何在iOS中使用WebP图像而不需要花费太多时间来加载它们吗? - Mounika Vangala
答案是正确的,但如果您没有安装webp子模块,则会给您一个错误消息,因此在设置预处理器宏之前,请先安装pod“SDWebImage / WebP”。 - nabu

9

添加

pod 'SDWebImage/WebP'

将以下代码添加到你的podfile中,然后运行pod install命令。Cocoapods会自动处理预处理器标志。

来自SDWebImage GitHub页面

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


6

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

}

似乎无法通过 Bundle 找到 webp 文件。有什么想法吗? - Stan
实际上,这个问题可以通过手动将webp文件添加到bundle中来解决。可以在项目->Bundle Phase->复制bundle资源中完成。 - Stan

4

我搜索了很多帖子,最终找到了这里。以下是我在github上询问后得出的解决方案。

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

步骤:

1:克隆并添加WebP.framework

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

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

image

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

image

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


1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接