Я вызываю метод делегата 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
. Я добавил моментальный снимок кода, потому что здесь, кажется, разделители примера кода не отображают их правильно.
Обновление 2 Ссылка на полный проект на GitHub: https://github.com/agu3rra/Out-Loud