swift UIImagePickerController и извлечение данных EXIF ​​из существующих фотографий - PullRequest
0 голосов
/ 27 сентября 2018

Мне нужно получить данные о местоположении (координаты широты и долготы) из изображения, выбранного из PhotoLibrary с использованием UIImagePickerController. Существующие ответы предлагает использовать fetchAssetsWithALAssetURLs, но не рекомендуется для iOS 8–11, поэтому мне интересно, какова альтернатива?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Это сработало для меня.Для новых версий iOS используйте следующие строки кода:

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

Обратите внимание, что asset = nil, если пользователь не дал разрешения на доступ к своей библиотеке фотографий, поскольку данные PHAsset являются конфиденциальными.

Чтобы получить разрешение, соответственно отредактируйте Info.plist и запросите разрешение, используя PHPhotoLibrary.requestAuthorization().

0 голосов
/ 27 сентября 2018

Если вы поддерживаете только iOS 11 и более поздние версии, вы можете напрямую получить PHAsset с помощью клавиши .phAsset.Вам нужно использовать PHAsset fetchAssetsWithALAssetURLs, только если вам нужна поддержка iOS 10 или более ранней версии.

Если у вас есть ссылка 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)")
        }
    }
}
...