我目前正在研究在我们的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中有数百个不同的图像。
提前致谢!
答案 0 :(得分:2)
我为UIImage
制作了完整的(解码/编码)WebP
包装器。
答案 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。