我正在使用NSImage
并希望将它们存储在Core Data
二进制对象中。我把事情搞定了,但我读了许多使用NSImageRep
来做这件事的方法。目前我正在做以下事情:
从图片创建二进制数据
- (NSData *)createBinaryWithImage:(NSImage *)image {
return [image TIFFRepresentation];
}
从二进制数据创建图像
- (NSImage *)createImageWithBinaryData:(NSData *)binaryData {
return [[NSImage alloc] initWithData:binaryData];
}
这是一种可接受且有效的方式还是有更好的方法?
答案 0 :(得分:1)
如果您只是想为自己往返一次,我通常会使用TIFFRepresentation
。这是NSImage
喜欢使用的内容,并且通常不需要任何昂贵的转换步骤。它非常接近"只是抛弃我们在这里得到的东西。"如果您不知道数据是压缩还是未压缩,那就特别好,因为它可以本地处理。
一般情况下,如果要在保存之前检查或操作像素,则转换为NSBitmapImageRep
然后从那里转换为其他格式(使用representationUsingType:properties:
)非常有用。但我不认为我只是为了将其转换为数据而创建一个图像代表。 NSImage
管理一组NSImageRep
并为每个目的选择正确的一个NSImageRep
的重点。你通常应该让它处理那部分。
今天PNG比TIFF更受欢迎,所以如果您在自己的数据存储之外编写文件,PNG将是一个更常见的选择(并且您需要通过{{1}工作} 到那里)。 JPEG当然是一个完全不同的东西,因为它有损,因此除了出口之外很少用于任何东西。