URL-адрес изображения, предоставленный UIImagePickerController
, не включает метаданные, связанные с глубиной. Чтобы получить эту информацию, вы должны получить доступ к PHAsset
с помощью API PhotoBook.
Сначала импортируйте API:
import Photos
Перед отображением средства выбора изображений запросите доступ пользователя к фотокниге. Вам нужно будет добавить ключ информационного словаря для использования библиотеки фотографий, чтобы это работало:
switch PHPhotoLibrary.authorizationStatus() {
case .notDetermined:
PHPhotoLibrary.requestAuthorization { (status) in
if status == .authorized {
DispatchQueue.main.async {
// Display image picker here
}
}
}
case .authorized: // Display image picker here
case .denied, .restricted: // Display appropriate error here
}
Теперь, в вашем делегате выбора изображений вы можете сделать это:
if let asset = info[.phAsset] as? PHAsset {
PHImageManager.default().requestImageData(for: asset, options: nil) { (imageData, dataType, orientation, info) in
let url = info?["PHImageFileURLKey"] as? URL
// Pass this URL to your existing code.
}
}
Обратите внимание, что файл может содержать информацию о глубине или несоответствии. Вы можете легко конвертировать между ними, но вам может понадобиться проверить, какой из них вы используете CGImageSourceCopyProperties()
. Также обратите внимание на новые дополнительные данные о глубине kCGImageAuxiliaryDataTypePortraitEffectsMatte
, которые дают маску с гораздо более высоким разрешением только для объекта съемки на портретных изображениях и отлично подходят для создания эффектов в стиле зеленого экрана.