从 PHAsset 问题中获取图像以检测图像更新
get Image from PHAsset issue to detect updates on images
我目前正在管理一个包含多张图片的 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 的图像被更改,我就能够检测到它的修改(我可以在我的应用程序屏幕上看到图片更新,但计算的哈希值仍然相同)
尝试以下操作:
options.version = .current
而不是
options.version = .original
您的代码将始终 return 原始的、未经编辑的 photo/video。 .当前 return 是您在 iOS 照片应用程序中看到的同一张照片。
我目前正在管理一个包含多张图片的 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 的图像被更改,我就能够检测到它的修改(我可以在我的应用程序屏幕上看到图片更新,但计算的哈希值仍然相同)
尝试以下操作:
options.version = .current
而不是
options.version = .original
您的代码将始终 return 原始的、未经编辑的 photo/video。 .当前 return 是您在 iOS 照片应用程序中看到的同一张照片。