【问题标题】:How to modify image metadata ( EXIF ) in iOS without duplicating?如何在不复制的情况下修改 iOS 中的图像元数据 ( EXIF )?
【发布时间】:2014-08-29 22:20:53
【问题描述】:

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

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

有没有办法避免重复? 感谢您的宝贵时间

【问题讨论】:

  • 我不相信这是可能的。 AssetsLibrary 根本不允许修改原始资产,所有内容都保存为引用原始资产的新资产。他们使用新的 PhotoKit 库,但我也看不到任何允许您修改元数据的东西。
  • @JackWu 你是对的。请添加为答案。
  • @JackWu,附议。请务必将其填写在任何其他偶然发现此问题的答案中(否则一半的赏金将分配给任何接受您的评论并在下面的框中解释它的人!)
  • 谢谢大家,回答已发布:]

标签: ios objective-c exif


【解决方案1】:

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

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

使用 iOS 8 中的新 PhotoKit 库,它们确实允许修改资产,但我也看不到任何允许您修改元数据的东西。

看一眼ImageIO 有修改元数据的方法,但同样没有将其保存到照片库中。 但是,有了这个,您可能可以用修改过的 exif 数据将磁盘上的文件替换为另一个文件。

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

如果它很重要,我建议您将其作为对 Apple 的增强提交,如果很多人要求相同的东西,他们可能会在未来添加它!不过,他们似乎确实不希望人们弄乱这些东西..

【讨论】:

  • 感谢您的回答。 ImageIO 会让我替换原始图像吗?最好能得到一个明确的答案。
  • @AbhishekMukherjee 我进行了编辑以详细说明。我会说不,您无法修改现有照片库图像的元数据。
  • 我认为 PhotoKit 允许您编辑原始图像的元数据。以下是 Apple Docs 中的一些文本“您使用照片库对象来执行对照片对象的更改,例如编辑资产元数据或内容、插入新资产或重新排列集合的成员。”
  • 当我说它不允许时,你可以相信我。 “元数据”是指dateCreatedlocationisFavoriteisHidden 之类的东西。实际上就是这样。您可以深入研究 API 并亲自查看。
  • 哦,我认为元数据将意味着图像的所有元数据。感谢您的信息。
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多