Я пытаюсь следовать некоторому коду, предоставленному Apple, для извлечения маски изображения из фотографий в портретном режиме с использованием некоторых новых классов и объектов, представленных в iOS 12. Код здесь:
https://developer.apple.com/documentation/avfoundation/avportraiteffectsmatte/extracting_portrait_effects_matte_image_data_from_a_photo
func portraitEffectsMatteImageAt(_ path: String) -> UIImage? {
let bundlePath = Bundle.main.bundlePath
// Check that the image at given path contains auxiliary PEM data:
guard let fileURL = NSURL(fileURLWithPath: bundlePath).appendingPathComponent(path),
let source = CGImageSourceCreateWithURL(fileURL as CFURL, nil),
let auxiliaryInfoDict = CGImageSourceCopyAuxiliaryDataInfoAtIndex(source, 0, kCGImageAuxiliaryDataTypePortraitEffectsMatte) as? [AnyHashable: Any],
let matteData = try? AVPortraitEffectsMatte(fromDictionaryRepresentation: auxiliaryInfoDict),
let matteCIImage = CIImage(portaitEffectsMatte: matteData)
else {
return nil
}
return UIImage(ciImage: matteCIImage)
}
Мое единственное изменение заключается в основном в изменении fileURL для использования jpg в моем комплекте.:
guard let fileURL = Bundle.main.url(forResource: "custom00", withExtension: "jpg")
Однако пошаговое выполнение кода позволяет мне увидеть, что присвоение auxiliaryInfoDict
равно nil
.Я импортировал эти JPG из предыдущего проекта, в котором для создания масок глубины использовались более старые методы (https://www.raywenderlich.com/314-image-depth-maps-tutorial-for-ios-getting-started), поэтому файлы jpg должны быть в порядке.
У кого-нибудь есть рабочий пример проекта? Спасибо