我正在创建一个照片编辑应用程序,到目前为止,我已经成功地从图像文件中读取了元数据(在得到这个问题的答案之后:在打开OS X上的NSImage时读取EXIF中的相机数据)。
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];
我该如何编写元数据?以前我只为JPEG编写EXIF(字典之前仅为EXIF),并成功地进行了编写,但由于EXIF缺少一些最初图像具有的字段(IPTC和TIFF标签),我需要更改我的读取方法。现在我有了所有数据,但我不知道如何将其写入新创建的图像文件。
谢谢, Can。