Лучшая практика хранения и получения NSImage в двоичном виде
Я работаю с NSImage
и хотите хранить их в Core Data
бинарный объект У меня все работает, но я прочитал много разных способов, которые используют NSImageRep
сделать это. В настоящее время я делаю следующее:
Создание двоичных данных из изображения
- (NSData *)createBinaryWithImage:(NSImage *)image {
return [image TIFFRepresentation];
}
Создание изображения из двоичных данных
- (NSImage *)createImageWithBinaryData:(NSData *)binaryData {
return [[NSImage alloc] initWithData:binaryData];
}
Это приемлемый и действительный способ или есть лучший способ?
1 ответ
Я бы обычно использовал TIFFRepresentation
если вы просто пытаетесь совершить путешествие туда и обратно для себя. Это что NSImage
любит работать и часто не требует дорогостоящего шага конвертации. Это довольно близко к "просто выбросить то, что мы получили здесь". Это особенно хорошо, если вы не знаете, являются ли данные сжатыми или несжатыми, поскольку они могут обрабатывать как исходные данные.
Как правило, преобразование в NSBitmapImageRep
а затем оттуда в какой-то другой формат (с representationUsingType:properties:
) является ценным, если вы хотите проверить или манипулировать пикселями перед сохранением. Но я не думаю, что я бы создал изображение представителя просто для преобразования его в данные. Весь смысл NSImage
управлять группой NSImageRep
и выберите правильный для каждой цели. Вы вообще должны просто позволить этому обращаться с этой частью.
Сегодня PNG намного более популярен, чем TIFF, поэтому, если вы пишете файлы вне собственного хранилища данных, PNG будет более распространенным выбором (и вам придется работать через NSImageRep
попасть туда). Конечно, JPEG - это совсем другое, потому что он с потерями, и поэтому его редко следует использовать для чего-либо, кроме экспорта.