以二进制形式存储和检索NSImage的最佳实践

时间:2016-01-09 10:16:48

标签: objective-c macos cocoa nsimage nsimagerep

我正在使用NSImage并希望将它们存储在Core Data二进制对象中。我把事情搞定了,但我读了许多使用NSImageRep来做这件事的方法。目前我正在做以下事情:

从图片创建二进制数据

- (NSData *)createBinaryWithImage:(NSImage *)image {
    return [image TIFFRepresentation];
}

从二进制数据创建图像

- (NSImage *)createImageWithBinaryData:(NSData *)binaryData {
    return [[NSImage alloc] initWithData:binaryData];
}

这是一种可接受且有效的方式还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

如果您只是想为自己往返一次,我通常会使用TIFFRepresentation。这是NSImage喜欢使用的内容,并且通常不需要任何昂贵的转换步骤。它非常接近"只是抛弃我们在这里得到的东西。"如果您不知道数据是压缩还是未压缩,那就特别好,因为它可以本地处理。

一般情况下,如果要在保存之前检查或操作像素,则转换为NSBitmapImageRep然后从那里转换为其他格式(使用representationUsingType:properties:)非常有用。但我不认为我只是为了将其转换为数据而创建一个图像代表。 NSImage管理一组NSImageRep并为每个目的选择正确的一个NSImageRep的重点。你通常应该让它处理那部分。

今天PNG比TIFF更受欢迎,所以如果您在自己的数据存储之外编写文件,PNG将是一个更常见的选择(并且您需要通过{{1}工作} 到那里)。 JPEG当然是一个完全不同的东西,因为它有损,因此除了出口之外很少用于任何东西。