Swift3 Swift 3 AVCaptureSession图像输出为纵向而非横向
我制作了一个简单的iOS应用程序,可以拍照并将其保存到设备库中。我希望输出一个横向图像,但相机产生的是横向图像的纵向方向,比如说50x100,图像旋转90度。我希望图像是横向的,但我不确定我的代码出了什么问题 我需要将预览层设置为横向,因此我将AVCaptureVideoOrientation设置为所需的方向Swift3 Swift 3 AVCaptureSession图像输出为纵向而非横向,swift3,avfoundation,orientation,avcapturesession,ios-camera,Swift3,Avfoundation,Orientation,Avcapturesession,Ios Camera,我制作了一个简单的iOS应用程序,可以拍照并将其保存到设备库中。我希望输出一个横向图像,但相机产生的是横向图像的纵向方向,比如说50x100,图像旋转90度。我希望图像是横向的,但我不确定我的代码出了什么问题 我需要将预览层设置为横向,因此我将AVCaptureVideoOrientation设置为所需的方向 previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.landscapeRight 以下是配置: ov
previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.landscapeRight
以下是配置:
override func viewWillAppear(_ animated: Bool) {
let devices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo)
for device in devices! {
if (device as AnyObject).position == AVCaptureDevicePosition.back {
do {
let input = try AVCaptureDeviceInput(device: device as! AVCaptureDevice)
if (captureSession.canAddInput(input)) {
captureSession.sessionPreset = AVCaptureSessionPresetPhoto
captureSession.addInput(input)
sessionOutput.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]
if (captureSession.canAddOutput(sessionOutput)) {
captureSession.addOutput(sessionOutput)
captureSession.startRunning()
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.videoGravity = AVLayerVideoGravityResize
previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.landscapeRight
previewLayer.frame = self.cameraView.bounds
cameraView.layer.addSublayer(previewLayer)
previewLayer.position = CGPoint(x: self.cameraView.frame.width / 2, y: self.cameraView.frame.height / 2)
previewLayer.bounds = cameraView.frame
cameraView.addSubview(captureBtn)
cameraView.addSubview(shutterTimer)
}
}
} catch let err {
print(err)
return
}
}
}
}
图像输出
if let videoConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo) {
sessionOutput.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (buffer, error) in
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
let image = UIImage(data: imageData!)!
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
print(UIImage(data: imageData!)!)
})
}
我明白了!,因此,在将图像保存到库中之前,必须根据预览层上的内容设置输出方向,只需添加以下行:
videoConnection.videoOrientation = .landscapeRight
if let videoConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo) {
// set output orientation before saving
videoConnection.videoOrientation = .landscapeRight
sessionOutput.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (buffer, error) in
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
let image = UIImage(data: imageData!)!
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
})
}