快速的UIImagePickerController并从现有照片中提取EXIF数据

时间:2018-09-27 05:01:35

标签: swift uiimagepickercontroller exif

我需要使用UIImagePickerController从PhotoLibrary拾取的图像中获取位置数据(纬度和经度坐标)。 Existing answers建议使用fetchAssetsWithALAssetURLs,但iOS 8至11不建议使用,所以我想知道还有什么选择吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这对我有用。对于新的iOS版本,请使用以下代码行。

var asset: PHAsset?
asset = info[UIImagePickerControllerPHAsset] as? PHAsset

请注意asset = nil,如果用户由于PHAsset数据敏感而未授予访问其照片库的权限。

要获得许可,请相应地编辑Info.plist,然后使用PHPhotoLibrary.requestAuthorization()来请求许可。

答案 1 :(得分:0)

如果您仅支持iOS 11及更高版本,则可以使用PHAsset键直接获取.phAsset。仅在需要支持iOS 10或更早版本时,才需要使用PHAsset fetchAssetsWithALAssetURLs

一旦有了PHAsset参考,就可以访问location属性来获取图像的坐标。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    var asset: PHAsset?
    if #available(iOS 11.0, *) {
        asset = info[.phAsset] as? PHAsset
    } else {
        if let url = info[.referenceURL] as? URL {
            let result = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil)
            asset = result.firstObject
        }
    }

    if let asset = asset {
        if let location = asset.location {
            print("Image location is \(location.coordinate.latitude), \(location.coordinate.longitude)")
        }
    }
}