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

Best practice of storing and retrieving an NSImage in binary

我正在使用 NSImage 并希望将它们存储在 Core Data 二进制对象中。我的工作正常,但我阅读了很多使用 NSImageRep 来执行此操作的不同方法。目前我正在做以下事情:

从图像创建二进制数据

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

从二进制数据创建图像

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

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

如果您只是想 round-trip,我通常会使用 TIFFRepresentation。这是 NSImage 喜欢使用的并且通常不需要任何昂贵的转换步骤。它非常接近 "just dump what we got here." 如果您不知道数据是压缩的还是未压缩的,它特别好,因为它可以本地处理。

如果您想在保存前检查或操作像素,通常转换为 NSBitmapImageRep 然后从那里转换为其他格式(使用 representationUsingType:properties:)是很有价值的。但我不认为我会创建图像代表只是为了将其转换为数据。一个 NSImage 的整点管理一组 NSImageRep 并为每个目的选择合适的。你通常应该让它处理那部分。

如今 PNG 比 TIFF 更受欢迎,因此如果您在自己的数据存储之外写入文件,PNG 将是更常见的选择(并且您需要通过 NSImageRep到达那里)。 JPEG 当然是完全不同的东西,因为它是有损的,因此除了导出之外很少用于其他用途。