【问题标题】:Best practice of storing and retrieving an NSImage in binary以二进制形式存储和检索 NSImage 的最佳实践
【发布时间】:2016-01-09 10:16:47
【问题描述】:

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

从图像创建二进制数据

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

从二进制数据创建图像

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

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

【问题讨论】:

  • 是的,它应该可以工作。您可能希望创建 png 或 jpeg 数据(数据大小和运行时性能不同)
  • Core Data 可以处理 NSImage。我不知道它是否有效,但它很容易。您不必担心格式、imageReps、二进制数据和值转换器。

标签: objective-c macos cocoa nsimage nsimagerep


【解决方案1】:

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

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

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

【讨论】:

  • 嘿,Rob,感谢您抽出宝贵时间回答我明天第一件事会调查!
猜你喜欢
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
相关资源
最近更新 更多