【问题标题】:Save image to photo album with datetime metadata使用日期时间元数据将图像保存到相册
【发布时间】:2016-01-08 13:40:42
【问题描述】:

我正在尝试使用 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 仍以当前时间戳而不是我尝试设置的时间戳保存在相册的末尾。

【问题讨论】:

    标签: ios swift metadata gif photos


    【解决方案1】:

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

    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
        }
    })
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2019-04-02
      相关资源
      最近更新 更多