【问题标题】:Metadata lost when saving photo using PHPhotoLibrary使用 PHPhotoLibrary 保存照片时元数据丢失
【发布时间】:2016-07-05 20:47:13
【问题描述】:

我曾经使用 ALAssetLibrary 的 writeImageToSavedPhotosAlbum:metadata:completionBlock 将照片保存到相机胶卷,但现在在 iOS 9.0 中已弃用,所以我切换到 PHPhotoLibrary 的版本,看起来像

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest creationRequestForAssetFromImage:image];
}completionHandler:^(BOOL success, NSError *error) {
    if (success){
        NSLog(@"Image Saved!");
    } else {
        NSLog(@"Error: %@", error);
    }
}];

这会保存图像本身,但会丢失元数据(exif ect),并且在保存照片时我找不到如何保存这些数据的任何修复程序。任何帮助,将不胜感激。 TYIA

【问题讨论】:

  • 一直在试图弄清楚如何在不重写源的情况下删除 exif 数据。这样做了 :) 一个人的问题是另一个人的解决方案。

标签: ios objective-c phphotolibrary


【解决方案1】:

我觉得方法

creationRequestForAssetFromImage:(UIImage *)image;

仅保存图像数据。它不包括元数据。

如果你想保存带有元数据的图像,你可以通过以下步骤来完成。

首先将您的图像保存在临时文件夹中,并将其路径作为 NSURL。 然后调用方法

creationRequestForAssetFromImageAtFileURL:(NSURL *)fileURL;

使用您在第一步中获得的 NSURL。

【讨论】:

  • @MitchD 对不起。我不知道在 Android 中执行相同操作的确切代码。但这是可能的,只需将文件保存在存储中并在媒体存储中注册即可。
  • 对于 iOS 9+,您可以跳过中间文件步骤并执行let request = PHAssetCreationRequest.forAsset(),然后使用您添加元数据的图像数据执行request.addResource(with:data:options:),所有这些都在 PHPhotoLibrary performChanges块。
  • @Undrea 谢谢你的信息。我会试试你的建议。
  • 那么是否可以使用creationRequestForAssetFromImageAtFileURL:(NSURL *)fileURL; 将exif 写入渲染的uiimage?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多