从 UIImagePickerController 获取图像位置
Posted
技术标签:
【中文标题】从 UIImagePickerController 获取图像位置【英文标题】:Get Image location from UIImagePickerController 【发布时间】:2016-07-20 05:59:39 【问题描述】:我尝试了多种方法来获取通过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
。我在网上读到,将图像保存到Photo Library
会处理它。对不对?
还有其他选择吗?我应该使用UIImageWriteToSavedPhotosAlbum
方法将图像保存到Camera Roll
,并且我可以使用Photos Framework
取回最近的照片。但我不认为UIImageWriteToSavedPhotosAlbum
会处理位置问题。
你有什么想法吗?
【问题讨论】:
你想获取图片的路径吗? 我正在使用 UIImagePickerController 通过将 Camera 设置为 UIImagePickerController 中的源类型来拍摄新照片。选择图像后,我将图像保存到照片库,并将其作为 PHAsset 取回。 PHAsset 没有任何关联的位置,我想要 PHAsset 的位置。 【参考方案1】:首先感谢所有好心研究这个问题的人。
我找到了答案。
//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)
)
【讨论】:
【参考方案2】:当您收到来自UIImagePickerController
的回调时:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo
info: [UIImagePickerController.InfoKey : Any])
您可以尝试从信息字典中获取图像位置。
为此,您需要请求相关的PHAsset
对象:
if let assetImage = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset
print("Image location info = \( assetImage.location))")
重要 - 在使用此方法之前,您需要请求用户权限:
PHPhotoLibrary.requestAuthorization()
如果您不这样做,UIImagePickerController.InfoKey.phAsset
的信息字典将返回 nil
。
【讨论】:
以上是关于从 UIImagePickerController 获取图像位置的主要内容,如果未能解决你的问题,请参考以下文章
从 UITabBarController 驱动 UIImagePickerController
从 UIImagePickerController 保存视频
UIImagePickerController 从 UICollectionViewCell 内的 UIImageView 呈现
如何从 UIImagePickerController 获取图像文件名