ios - 将图像与日期时间元数据保存到相册

标签 ios swift metadata gif photos

我正在尝试使用 writeImageDataToSavedPhotosAlbum 中的元数据属性将 GIF 保存到 iPhone 的相册并添加日期/时间元数据,以便保存的 GIF 出现在用户照片中的不同位置相册而不是相册末尾的默认位置。

我尝试执行以下操作:

let metadata: [String: AnyObject]! = [kCGImagePropertyTIFFDictionary as String: 
    [kCGImagePropertyTIFFDateTime as String: dateTime!], 
    kCGImagePropertyExifDictionary as String: 
    [kCGImagePropertyExifDateTimeDigitized as String: dateTime!, 
    kCGImagePropertyExifDateTimeOriginal as String: dateTime!]]
library.writeImageDataToSavedPhotosAlbum(data, metadata: metadata, completionBlock: completionBlock)

元数据变量的调试打印显示:

["{TIFF}": {
    DateTime = "2015:10:09 20:07:48";
}, "{Exif}": {
    DateTimeDigitized = "2015:10:09 20:07:48";
    DateTimeOriginal = "2015:10:09 20:07:48";
}]

但是,设置元数据似乎不起作用,因为 GIF 仍然使用当前时间戳而不是我尝试设置的时间戳保存在相册的末尾。

最佳答案

照片应用程序似乎不会根据图像元数据中的日期进行排序(很可能是因为元数据可以存储在 iCloud 上,但可能在本地不可用)。相反,它似乎按 creationDate 排序,这是在 PHAsset 上定义的属性。您可以使用照片框架更改它。像这样的事情应该可以解决问题:

PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
    let request = PHAssetChangeRequest(forAsset: asset)
    request.creationDate = dateTime!
}, completionHandler: { (success: Bool, error: NSError?) -> Void in
    dispatch_async(dispatch_get_main_queue()) {
        //done
    }
})

但是请注意,相机胶卷或所有照片相册的排序方式与年份、收藏和时刻 View 不同。由于某种原因,相机胶卷/所有照片不会按 creationDate 进行排序,而年份、收藏和时刻会按creationDate 排序。它也不使用照片元数据,因此我不确定它正在检查什么来对该相册的照片进行排序。

关于ios - 将图像与日期时间元数据保存到相册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058046/

相关文章:

ios - prepareForSegue 没有发送正确的参数

iphone - 不要在 Iphone SDK 的第一个登录页面显示标签栏

swift - 如何在 Swift MacOS 中通过 Process 执行多个命令

ios - 使用 Firebase 存储上传自定义元数据

iOS:如何在我的应用程序中设置铃声和警报音量

swift - 当我尝试呈现消息格式时出现错误?

swift - vapor 构建命令不适用于 Swift 3.0

join - SSIS 合并连接组件写入 0 行

salesforce - Apex 如何更新自定义元数据类型记录/文字值?

ios - 在另一个 Controller 中停止 AVPlayer 音乐