Если AVCaptureVideoPreviewLayer
ориентация правильно, вы можете просто установить ориентацию, прежде чем захватить изображение.
AVCaptureStillImageOutput *stillImageOutput;
AVCaptureVideoPreviewLayer *previewLayer;
NSData *capturedImageData;
AVCaptureConnection *videoConnection = [stillImageOutput connectionWithMediaType:AVMediaTypeVideo];
if ([videoConnection isVideoOrientationSupported]) {
[videoConnection setVideoOrientation:previewLayer.connection.videoOrientation];
}
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error) {
CFDictionaryRef exifAttachments =
CMGetAttachment(imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
if (exifAttachments) {
// Do something with the attachments.
}
// TODO need to manually add GPS data to the image captured
capturedImageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [UIImage imageWithData:capturedImageData];
}];
Кроме того, важно отметить, что UIImageOrientation
и AVCaptureVideoOrientation
различны. UIImageOrientationUp
относится к ландшафтному режиму с регуляторами громкости вниз к земле (не, если вы думаете об использовании регуляторов громкости в качестве кнопки спуска затвора).
Таким образом, ориентация на портрет с кнопкой питания, указывающей на небо (AVCaptureVideoOrientationPortrait
), на самом деле UIImageOrientationLeft
.
'свойство«videoOrientation»не найден на объект типа«AVCaptureSession *»' – cheeesus
права ответ, должен быть принят. – Rivera
@cheesus videoOrientation находится на AVCaptureConnection, не AVCaptureSession – GabCas