Как получить данные / метаданные фотографии после выбора в PHPickerViewController?

В приложении, над которым я работаю, мне поручено предоставить пользователю фотографии с его устройства с помощью PHPickerViewController.

После выбора мне понадобится доступ к:

  1. Исходные данные изображения
  2. Имя файла изображения
  3. Дата создания образа

Это просто сделать с помощью PHAsset если бы у меня был полный доступ к фотографиям пользователя - я мог бы использовать PHPickerViewController значение результата, которое включает идентификаторы фотографий для запроса PhotoKit для PHAssets. Однако нет никакой гарантии, что у меня есть полный доступ. Кроме того, если пользователь не предоставил доступ или ограниченный доступ, и ограниченный выбор не включает фотографии, выбранные вPHPickerViewController, Я не смогу их запросить. (Я пробовал это, и, как и ожидалось, результат запроса ноль, что имеет смысл).

В UIImageкоторые я могу получить, это только прокси исходных данных изображения (отсутствуют такие вещи, как данные exif и т. д.), поэтому этого недостаточно для пользовательского случая, который есть в моем приложении. Если предположить, что для данных существует поставщик элементов, мне все равно понадобится информация, такая как имя файла и дата создания.

Итак, есть ли способ получить эту информацию?

1 ответ

UIImage, который я могу получить, является только прокси-сервером исходных данных изображения (отсутствуют такие вещи, как данные exif и т.д.), поэтому этого недостаточно для пользовательского случая, когда мое приложение имеет

Вернитесь к NSItemProvider и попросите у него представление данных изображения. Теперь извлеките метаданные обычным способом.

// prov is the item provider
prov.loadDataRepresentation(forTypeIdentifier: UTType.image.identifier) { data, err in
    if let data = data {
        let src = CGImageSourceCreateWithData(data as CFData, nil)!
        let d = CGImageSourceCopyPropertiesAtIndex(src,0,nil) as! [AnyHashable:Any]
        print("metadata", d)
    }
}
Другие вопросы по тегам