Schreiben von Bildmetadaten (EXIF / TIFF / IPTC) in eine Bilddatei in OS X

Ich erstelle eine Fotobearbeitungs-App und konnte die Metadaten aus den Bilddateien bisher erfolgreich lesen (nachdem ich eine Antwort auf diese Frage erhalten habe:Lesen von Kameradaten aus EXIF ​​beim Öffnen von NSImage unter OS X).

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

Dadurch werden alle Metadaten der Bilddatei in ein Wörterbuch kopiert, und es funktioniert fehlerfrei. Ich konnte jedoch nicht herausfinden, wie diese Metadaten in eine neu erstellte zurückgeschrieben werdenNSImage (oder in eine Bilddatei). So speichere ich meine Datei (woimg ist eine NSImage-Instanzohne Metadaten undself.cachedMetadata wird das Wörterbuch aus dem Ausgangsbild gelesen):

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

Wie kann ich die Metadaten schreiben? Früher habe ich nur EXIF ​​für JPEG geschrieben (das Wörterbuch war zuvor nur EXIF-fähig), aber da EXIF ​​einige der Felder der Ausgangsbilder (IPTC- und TIFF-Tags) nicht enthielt, musste ich meine Lesemethode ändern. Jetzt habe ich alle Daten, weiß aber nicht, wie ich sie in die neu erstellte Bilddatei schreiben soll.

Danke, Can.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage