8

我目前正在研究在我们的 iOS 软件中使用 Google 的 WebP 图像格式的可能性。

我发现使用 Google 的 C 库根据需要将 WebP 解码为 RGBA8888 并不难。

但是,我想创建一个在 API 和性能方面与 UIImage 相当的实现。

Q1。是否可以在 iOS 中开发图像解码器,以便原生 imageWithData 和其他 API 读取新格式?

Q2。如果不是,UIImageView(和其他框架提供的控件)使用什么 API 来绘制 UIImage?它是公共的(例如drawInRect/drawAtPoint)还是内部的?

我可以从 UIImage 继承,覆盖一些方法(例如 +imageWithContentsOfFile、+imageWithData、+imageNamed、-drawInRect、-drawAtPoint),并让我的 WPImage 对象在 SDK 提供的 API 中表现良好吗?

Q3。如果我假设的 WPImage 类的每个实例都订阅 UIApplicationDidReceiveMemoryWarningNotification (以刷新 RGBA 图像缓冲区,将更小的原始 WebP 数据留在 RAM 中),它不会对性能造成太大影响吗?

我们正在开发的软件可能很容易在 RAM 中有数百个不同的图像。

4

6 回答 6

3

UIImageWebP.

https://github.com/shmidt/WebP-UIImage

于 2013-08-02T10:14:51.843 回答
1

有一个例子。https://github.com/carsonmcdonald/WebP-iOS-example

于 2012-05-07T02:37:26.037 回答
1

iOS 14 支持 WebP 图像

更新您的设备。

于 2020-09-23T04:48:19.880 回答
0

首先,将 WebP 像素解码到缓冲区中。然后,您需要调用 CGDataProviderCreateWithData() 为 CoreGraphics 创建一个“数据提供者”,然后调用 CGImageCreate() 并传入提供者和所有需要的参数。最后,调用 UIImage imageWithCGImage:imageRef 以创建 UIImage 实例。

于 2013-07-15T17:47:57.560 回答
0

我写的另一个例子使用了 Carson McDonald 开始的工作,但以可重用的方式。基本上,您将 WebP.framework 添加到您的项目中(包含在我的示例中或使用 Carson 在他的网站上的说明创建),然后您可以执行以下操作:

#import "UIImage+WebP.h"
...

self.imageView.image = [UIImage imageFromWebP:@"path/to/image.webp"];
// or
[self.button setImage:[UIImage imageFromWebP:@"path/to/image.webp" 
        forState:UIControlStateNormal]];

如果你想看看我的例子,去这里:https ://github.com/nyteshade/iOSWebPWithAlphaExample

于 2013-03-17T06:42:33.707 回答
0

SDWebImage是一个提供异步图像下载器的库,可以通过SDWebImageWebPCoder轻松扩展以支持 WebP 。

于 2020-09-22T12:41:38.910 回答