如何修改iOS中的图像元数据(EXIF)而不重复?

时间:2014-07-09 02:15:10

标签: ios objective-c exif

目前我使用的代码可以编写更新的元数据,但会创建一个重复的图像。这是代码:

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.");
                             }
                         }];
        }

有没有避免重复? 谢谢你的时间

1 个答案:

答案 0 :(得分:6)

正如评论中所述,我不相信这是可能的。

AssetsLibrary 根本不允许修改原始资产,所有内容都会保存为新资源并引用原始资产。

使用iOS 8中的新 PhotoKit 库,他们允许修改资产,但我没有看到任何允许您修改元数据的内容。

瞥一眼 ImageIO ,有一些修改元数据的方法,但同样没有什么可以将它保存到照片库。 但是,通过这种方式,您可以将磁盘上的文件替换为另一个具有已修改的exif数据的文件。

编辑以详细说明: 根据答案here,ALAssets似乎提供了一个不指向磁盘的URL。我相信这意味着您无法获取图像的实际URL以覆盖它,但不会在照片库中。

我建议你把它作为Apple的增强版,如果它很重要,如果很多人要求同样的东西,他们可能会在将来添加它!看起来他们似乎并不希望人们弄乱这些东西。

相关问题