有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?

Posted

技术标签:

【中文标题】有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?【英文标题】:Is there any way to convert CIImage to NSData without converting CIImage to UIImage or CGImage?有什么方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData? 【发布时间】:2017-02-02 10:35:01 【问题描述】:

有什么方法可以在不将CIImage 转换为UIImageCGImage 的情况下将CIImage 转换为NSData

我正在尝试制作相机应用程序。 抓图时,我用 CIImage 处理图像,为图像赋予滤镜效果,编辑一些元数据并通过 PHAssetCreationRequest 保存。

在此过程中,我将 imagedata 更改为 CIImage,CIImage 更改为 UIImage,UIImage 更改为 NSData。显然这需要时间,我想节省一些时间。

那么,有没有什么方法可以将CIImage 转换为NSData 而无需将CIImage 转换为UIImageCGImage

【问题讨论】:

【参考方案1】:

CIContext 有一个方法,JPEGRepresentationOfImage:colorSpace:options,可以在不转换为 UIImage 的情况下转换为 NSData。

CIContext *contextToUse = ...;
NSData *imageData = [contextToUse JPEGRepresentationOfImage:image colorSpace:... options:@];

【讨论】:

它有效!非常感谢。虽然,它并没有比我预期的快多少。 CIImageCGImageNSData 过程比这种方法快一点。 嗯...在幕后,所有图像都只是 3d 数组。但您可能还想使用不同的 CIContext 类型进行测试。 好的,我试试,非常感谢! CIImage 将渲染推迟到最后一刻,并且,在您的情况下,从 CIImage 中获取数据是必须进行渲染的那一刻。 @TKang 你最后用了哪种方法?

以上是关于有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将字体转换为轮廓的情况下将 cairo-pdf 转换为 eps

在不将单个像素值转换为浮点数的情况下调整目标分割图的大小

Laravel:有啥方法可以在不编译的情况下加载刀片模板?

有啥方法可以将 Kivy 相机照片保存为 base64 而不将其导出为 png?

如何在不将 LocalDateTime 字段转换为扩展的 json 对象的情况下将 java 对象转换为简单的 json 字符串?

我可以在不将图像上传到 cloudinary 的情况下转换图像吗?