gpt4 book ai didi

ios - LandscapeRight 前置摄像头倒置拍摄的照片

转载 作者:可可西里 更新时间:2023-11-01 00:59:14 25 4
gpt4 key购买 nike

我正在使用 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()

最佳答案

开始配置相机...

    if captureSession.canAddOutput(videoOutput) {
captureSession.addOutput(videoOutput)
let connection = videoOutput.connectionWithMediaType(AVMediaTypeVideo)
if connection.supportsVideoOrientation {
connection.videoOrientation = isFrontCamera ? AVCaptureVideoOrientation.LandscapeLeft : AVCaptureVideoOrientation.LandscapeRight
}
print("adding output")

} else {
print("Could not add front video output")
return
}

captureSession.commitConfiguration()
captureSession.startRunning()

...为相机设置预览层。

func setupPreviewLayer() {        
var previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
var bounds = cameraView.bounds
previewLayer.backgroundColor = UIColor.blackColor().CGColor
previewLayer.bounds = bounds
previewLayer.videoGravity = AVLayerVideoGravityResize
previewLayer.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))
previewLayer.connection.videoOrientation = recordingOrientation;
self.cameraView.layer.addSublayer(previewLayer)

}

您可以尝试一些解决方法,其中一个选项是:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.currentDevice().orientation.isLandscape.boolValue {
print("Landscape")
} else {
print("Portrait")
}
}

另一种解决方法是在拍照后旋转和/或翻转图像。

关于ios - LandscapeRight 前置摄像头倒置拍摄的照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com