使用日期时间元数据将图像保存到相册

Save image to photo album with datetime metadata

我正在尝试使用 writeImageDataToSavedPhotosAlbum 中的元数据 属性 将 GIF 保存到 iPhone 的相册并添加 date/time 元数据,以便保存的 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
    }
})

但是请注意,相机胶卷或所有照片相册的排序方式与年份、Collections 和时刻视图的排序方式不同。出于某种原因,Camera Roll/All 照片不会按 creationDate 排序,而 Years、Collections 和 Moments 会。它也不使用照片元数据,所以我不确定它正在检查什么来对相册的照片进行排序。