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

use*_*erx 4 exif objective-c ios

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

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.");
                             }
                         }];
        }
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ack 6

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

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

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

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

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

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