Я вызываю метод делегата AVFoundation для обработки фотоснимка, но мне трудно преобразовать генерируемый AVCapturePhoto в UIImage с правильной ориентацией. Хотя приведенная ниже процедура успешна, я всегда ориентируюсь на правильность UIImage (UIImage.imageOrientation = 3). У меня нет способа обеспечить ориентацию при использовании UIImage(data: image), и попытка первого использования photo.cgImageRepresentation()?.takeRetainedValue() также не помогает. Пожалуйста, помогите.
Ориентация изображения здесь имеет решающее значение, так как полученное изображение передается в рабочий процесс Vision Framework.
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
// capture image finished
print("Image captured.")
if let imageData = photo.fileDataRepresentation() {
if let uiImage = UIImage(data: imageData){
// do stuff to UIImage
}
}
}
ОБНОВЛЕНИЕ 1: Прочитав Apple Руководство по программированию захвата фотографий (устарело для iOS11), мне удалось обнаружить одну вещь, которую я делал неправильно:
- При каждом вызове захвата (
self.capturePhotoOutput.capturePhoto) необходимо установить соединение с объектомPhotoOutputи обновить его ориентацию, чтобы она соответствовала ориентации устройства в момент съемки. Для этого я создал расширениеUIDeviceOrientationи использовал его в функцииsnapPhoto(), которую я создал, чтобы вызвать процедуру захвата и дождаться выполнения метода делегатаdidFinishProcessingPhoto. Я добавил моментальный снимок кода, потому что здесь, кажется, разделители примера кода не отображают их правильно.
![enter image description here]()
Обновление 2 Ссылка на полный проект на GitHub: https://github.com/agu3rra/Out-Loud


