2

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

从图像创建二进制数据

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

从二进制数据创建图像

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

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

4

1 回答 1

1

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

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

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

于 2016-01-09T15:01:44.493 回答