Zapisywanie metadanych obrazu (EXIF / TIFF / IPTC) do pliku obrazu w OS X

Tworzę aplikację do edycji zdjęć i jak dotąd udało mi się pomyślnie odczytać metadane z plików graficznych (po otrzymaniu odpowiedzi na to pytanie:Odczyt danych aparatu z EXIF ​​podczas otwierania NSImage na OS X).

source = CGImageSourceCreateWithURL((__bridge CFURLRef)url, NULL);
NSDictionary *props = (__bridge_transfer NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);

Powoduje to skopiowanie wszystkich metadanych pliku obrazu do słownika i działa dobrze. Nie mogłem jednak dowiedzieć się, jak napisać te metadane z powrotem do nowo utworzonegoNSImage (lub do pliku obrazu). Oto jak zapisać mój plik (gdzieimg jest instancją NSImagebez metadane iself.cachedMetadata to słownik czytany z początkowego obrazu):

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];

Jak mogę napisać metadane? Kiedyś pisałem tylko EXIF ​​dla JPEG (słownik był wcześniej tylko EXIF), ale ponieważ EXIF ​​brakowało niektórych pól, które miały początkowe obrazy (znaczniki IPTC i TIFF), musiałem zmienić metodę odczytu. Teraz mam wszystkie dane, ale nie wiem, jak je zapisać w nowo utworzonym pliku obrazu.

Dzięki, Can.

questionAnswers(2)

yourAnswerToTheQuestion