【问题标题】:get Image from PHAsset issue to detect updates on images从 PHAsset 问题中获取图像以检测图像的更新
【发布时间】:2020-04-11 01:07:50
【问题描述】:

我目前正在管理一个包含多张图片的 PHAsset(来自我的应用程序正在创建的相册),我可以毫无问题地显示它。 对于我的 PHAsset 的每张图片,我正在计算我的应用程序中每张图片的哈希值。 但是,如果我从我的应用程序中修改图片(例如,通过照片,我正在更改图片的颜色),如果我再计算一次哈希,我将无法检测到更新恢复我的应用时的 PHAsset 图片,未检测到更新,哈希值保持不变...

这是从 PHAsset 获取图像的代码:

var img: UIImage?
    let manager = PHImageManager.default()
    let options = PHImageRequestOptions()
    options.version = .original
    options.isSynchronous = true
    manager.requestImageData(for: asset, options: options) { (data, _, _, _) in
        if let data = data{
            img = UIImage(data: data)
        }

    }
    return img

我在添加图片时使用此函数(计算哈希),当我需要检查 PHasset 图片的哈希时,我正在使用

检索 PHAssetCollection
        let collection = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)

但未检测到任何更改...可能我需要刷新 PHAssetCollection 以检索图片上的更改? 我错过了什么吗?

为了清楚起见,我正在使用以下内容计算图像的哈希值:

//function described just above
let img = getSavedImageFromPHAsset(asset: myAsset)!
let img_hash = img.sha256()
//I'm comparing the hashes with this value

func sha256(data: Data) -> Data {
    var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))

    _ = digestData.withUnsafeMutableBytes {digestBytes in
        data.withUnsafeBytes {messageBytes in
            CC_SHA256(messageBytes, CC_LONG(data.count), digestBytes)
        }
    }
    return digestData
}

我假设一旦链接到 PHAsset 的图像发生更改,我就能够检测到它的修改(我可以在我的应用屏幕上看到更新的图片,但计算的哈希值仍然相同)

【问题讨论】:

    标签: swift4 phasset phassetcollection


    【解决方案1】:

    尝试以下方法:

    options.version = .current
    

    而不是

    options.version = .original
    

    您的代码将始终返回未经编辑的原始照片/视频。 .current 返回您在 iOS 照片应用中看到的同一张照片。

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多