Я использую AVFoundation для съемки фотографий с помощью фронтальной камеры. Когда устройство ориентировано на ландшафт, все работает нормально, но когда пейзаж прав, снимки перевернуты вверх ногами.Ландшафтная фотография передних фотоаппаратов с перевернутой вверх
func setOutputOrientation() {
var outputOrientation: AVCaptureVideoOrientation!
let connection = self.previewLayer.connection
if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft {
outputOrientation = AVCaptureVideoOrientation.LandscapeRight
}
else if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight {
outputOrientation = AVCaptureVideoOrientation.LandscapeLeft
}
else if UIDevice.currentDevice().orientation == UIDeviceOrientation.Portrait {
outputOrientation = AVCaptureVideoOrientation.Portrait
}
else if UIDevice.currentDevice().orientation == UIDeviceOrientation.PortraitUpsideDown {
outputOrientation = AVCaptureVideoOrientation.PortraitUpsideDown
}
connection.videoOrientation = outputOrientation
}
и следующее в viewDidLoad:
let device = getFrontCamera(
let error : NSError? = nil
let input: AVCaptureDeviceInput?
do {
input = try AVCaptureDeviceInput(device: device)
} catch _ {
input = nil
}
if input != nil {
session.addInput(input)
}
else {
print(error)
}
session.sessionPreset = AVCaptureSessionPresetPhoto
previewLayer = AVCaptureVideoPreviewLayer(session: session) as AVCaptureVideoPreviewLayer
previewLayer.frame = CGRectMake(0, 0, 300, 300)
previewLayer.setAffineTransform(CGAffineTransformTranslate(CGAffineTransformMakeScale(0.33, 0.33), -375, -480))
previewLayer.position = upperRightPosition
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.view.layer.addSublayer(previewLayer)
let photoImage = UIImage(named:"PhotoTwo")
session.startRunning()
output.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if session.canAddOutput(output)
{
session.addOutput(output)
}
self.setOutputOrientation()
Уровень предварительного просмотра отображается точно так, как должен, это просто снятое фото, это неправильно. – lunadiviner
Моя забота заключалась в том, что вы делаете вызовы методов. Например, вы 'session.startRunning()' перед добавлением 'output' – Asdrubal
Я изменил его так, что session.startRunning() - это последнее, что называется, и я также попытался установить ориентацию вывода в функции захвата фотографий до фото сделана, но я все еще сталкиваюсь с той же проблемой. – lunadiviner