Запись метаданных изображения (EXIF / TIFF / IPTC) в файл изображения в OS X
Я создаю приложение для редактирования фотографий, и до сих пор мне удалось успешно прочитать метаданные из файлов изображений (после получения ответа на этот вопрос:Чтение данных камеры из EXIF при открытии NSImage на OS X).
source = CGImageSourceCreateWithURL((__bridge CFURLRef)url, NULL);
NSDictionary *props = (__bridge_transfer NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
Это копирует все метаданные файла изображения в словарь, и это работает очень хорошо. Тем не менее, я не мог узнать, как записать эти метаданные обратно во вновь созданныйNSImage
(или в файл изображения). Вот как я могу сохранить свой файл (гдеimg
это экземпляр NSImageбез метаданные иself.cachedMetadata
читается ли словарь из исходного изображения):
NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:[img TIFFRepresentation]];
[rep setProperty:NSImageEXIFData withValue:self.cachedMetadata];
NSData *data;
if([[fileName lowercaseString] rangeOfString:@".png"].location != NSNotFound){
data = [rep representationUsingType:NSPNGFileType properties:nil];
}else if([[fileName lowercaseString] rangeOfString:@".tif"].location != NSNotFound){
data = [rep representationUsingType:NSTIFFFileType properties:nil];
}else{ //assume jpeg
data = [rep representationUsingType:NSJPEGFileType properties:@{NSImageCompressionFactor: [NSNumber numberWithFloat:1], NSImageEXIFData: self.cachedMetadata}];
}
[data writeToFile:fileName atomically:YES];
Как я могу написать метаданные? Раньше я успешно писал только EXIF для JPEG (словарь ранее был только EXIF), но поскольку в EXIF отсутствовали некоторые поля, которые были в исходных изображениях (теги IPTC и TIFF), мне нужно было изменить метод чтения. Теперь у меня есть все данные, но я не знаю, как записать их во вновь созданный файл изображения.
Спасибо, может.