以二进制形式存储和检索 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 当然是完全不同的东西,因为它是有损的,因此除了导出之外很少用于其他用途。
我正在使用 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 当然是完全不同的东西,因为它是有损的,因此除了导出之外很少用于其他用途。