我正在使用NSImage,并希望将它们存储在Core Data二进制对象中。我可以正常工作,但我阅读了许多使用NSImageRep来实现此操作的不同方法。目前,我正在做以下工作:
从图像创建二进制数据
- (NSData *)createBinaryWithImage:(NSImage *)image {
return [image TIFFRepresentation];
}从二进制数据创建图像
- (NSImage *)createImageWithBinaryData:(NSData *)binaryData {
return [[NSImage alloc] initWithData:binaryData];
}这是一种可以接受和有效的方式,还是有更好的方法?
发布于 2016-01-09 15:01:44
如果你只是想自己往返的话,我通常会使用TIFFRepresentation。这正是NSImage喜欢使用的地方,而且通常不需要任何昂贵的转换步骤。它很接近“扔掉我们这里的东西”。如果您不知道数据是压缩的还是未压缩的,这就特别好了,因为它可以在本地处理。
通常,如果您想在保存之前检查或操作像素,则转换为NSBitmapImageRep,然后从那里转换为其他格式(使用representationUsingType:properties:)是很有价值的。但我不认为我会创建一个图像代表只是为了把它转换成数据。NSImage的全部要点是管理一组NSImageRep并为每个目的选择合适的一组。你应该让它来处理这部分。
现在PNG比TIFF更受欢迎,所以如果您在自己的数据存储之外编写文件,那么PNG将是一个更常见的选择(您需要通过NSImageRep才能达到这个目的)。当然,JPEG是一个完全不同的东西,因为它是有损的,所以很少被用于任何东西,除了导出。
https://stackoverflow.com/questions/34692226
复制相似问题