我尝试了多种方法来获取通过 UIImagePickerController Camera
拍摄的图像的位置。
我想要实现的是,我想使用 UIImagePickerController
Camera
选择一个图像,我必须将它保存到 Photo Library
这样只有我才能从中取回 PHAsset
以及与之关联的位置。
//MARK: Saving an Image to PhotoLibrary and taking back the PHAsset
class func savingThis(image : UIImage, completion : (asset : PHAsset?) -> ())
{
var localIdentifier : String?
let imageManager = PHPhotoLibrary.sharedPhotoLibrary()
imageManager.performChanges({ () -> Void in
let request = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
if let properAsset = request.placeholderForCreatedAsset {
localIdentifier = properAsset.localIdentifier
}
else {
completion(asset: nil)
}
}, completionHandler: { (success, error) -> Void in
if let properLocalIdentifier = localIdentifier {
let result = PHAsset.fetchAssetsWithLocalIdentifiers([properLocalIdentifier], options: nil)
if result.count > 0 {
completion(asset: result[0] as? PHAsset)
}
else {
completion(asset: nil)
}
}
else {
completion(asset: nil)
}
})
}
我试过这段代码,保存并取回 PHAsset。但问题是这个 PHAsset
没有任何关联的位置,不知道为什么?我错过了什么?
我相信我不必手动将 GPS
数据设置到图像的元数据中,对吗?我认为 Photos Framework
或 Asset Library
会处理它。如您所知,Asset Library
已弃用,我们唯一的选择是使用 Photos Framework
。我在网上看到,Saving image to Photo Library
可以解决这个问题。不对吗?
还有其他选择吗?我是否应该使用 UIImageWriteToSavedPhotosAlbum
方法将图像保存到 Camera Roll
,并且我可以使用 Photos Framework
取回最近的照片。但我认为 UIImageWriteToSavedPhotosAlbum
不会处理位置问题。
你有什么想法吗?
最佳答案
首先感谢所有好心的人来研究这个问题。
我找到了答案。
//MARK: Saving an Image to PhotoLibrary and taking back the PHAsset
class func savingThis(image : UIImage, completion : (asset : PHAsset?) -> ())
{
var localIdentifier : String?
let imageManager = PHPhotoLibrary.sharedPhotoLibrary()
imageManager.performChanges({ () -> Void in
let request = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
request.location = // Assigned current location here :)
if let properAsset = request.placeholderForCreatedAsset {
localIdentifier = properAsset.localIdentifier
}
else {
completion(asset: nil)
}
}, completionHandler: { (success, error) -> Void in
if let properLocalIdentifier = localIdentifier {
let result = PHAsset.fetchAssetsWithLocalIdentifiers([properLocalIdentifier], options: nil)
if result.count > 0 {
completion(asset: let asset = result[0] as? PHAsset)
}
else {
completion(asset: nil)
}
}
else {
completion(asset: nil)
}
})
}
关于ios - 从 UIImagePickerController 获取图像位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473369/