iOS上的WebP图像格式

时间:2011-12-29 19:19:32

标签: iphone ios uiimage image-formats webp

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

我发现使用谷歌的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图像缓冲区,而在RAM中留下更小的原始WebP数据),这不会对性能造成太大影响吗?我们正在开发的软件可能很容易在RAM中有数百个不同的图像。

提前致谢!

6 个答案:

答案 0 :(得分:2)

我为UIImage制作了完整的(解码/编码)WebP包装器。

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

答案 1 :(得分:1)

答案 2 :(得分:1)

WebP图像支持进入iOS 14

更新您的设备。

答案 3 :(得分: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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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