目前我使用的代码可以编写更新的元数据,但会创建一个重复的图像。这是代码:
if( [self.textView.text length] != 0 && ![self.userComments isEqualToString: self.textView.text])
{
// This code works but creates a duplicate image
NSMutableDictionary *userCommentDictionary = [NSMutableDictionary dictionary];
[userCommentDictionary setValue:self.textView.text forKey:(NSString *)kCGImagePropertyExifUserComment];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValue:userCommentDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];
ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init];
[al writeImageToSavedPhotosAlbum:[self.imageView.image CGImage]
metadata:dict
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error == nil) {
NSLog(@"Image saved.");
self.userComments = self.textView.text;
} else {
NSLog(@"Error saving image.");
}
}];
}
有没有避免重复? 谢谢你的时间
答案 0 :(得分:6)
正如评论中所述,我不相信这是可能的。
AssetsLibrary 根本不允许修改原始资产,所有内容都会保存为新资源并引用原始资产。
使用iOS 8中的新 PhotoKit 库,他们允许修改资产,但我没有看到任何允许您修改元数据的内容。
瞥一眼 ImageIO ,有一些修改元数据的方法,但同样没有什么可以将它保存到照片库。 但是,通过这种方式,您可以将磁盘上的文件替换为另一个具有已修改的exif数据的文件。
编辑以详细说明: 根据答案here,ALAssets似乎提供了一个不指向磁盘的URL。我相信这意味着您无法获取图像的实际URL以覆盖它,但不会在照片库中。
我建议你把它作为Apple的增强版,如果它很重要,如果很多人要求同样的东西,他们可能会在将来添加它!看起来他们似乎并不希望人们弄乱这些东西。