【问题标题】:How to take high quality videos/photos in swift?如何快速拍摄高质量的视频/照片?
【发布时间】:2016-07-31 16:03:08
【问题描述】:

如何提高相机质量?我想拍一张全屏显示的照片/视频?如果我将会话预设设置为 AVCaptureSessionPresetPhoto 它是高质量和全屏的,但仅适用于照片而不适用于视频。我已经尝试了其他所有方法,但没有任何效果。 目前,它看起来像这样:

编辑

为什么我的照片看起来像这样?

@IBAction func takePhoto(sender: AnyObject) {
    var imageViewBackground: UIImageView!
    self.fullScreenView.hidden = false
    self.recordButton.enabled = false
    self.takephoto.enabled = false
    self.recordButton.hidden = true
    self.takephoto.hidden = true

    session.startRunning()

    // add the AVCaptureVideoPreviewLayer to the view and sets the view in fullscreen
    fullScreenView.frame = view.bounds
    videoPreviewLayer.frame = fullScreenView.bounds
    fullScreenView.layer.addSublayer(videoPreviewLayer)

    // add action to fullScreenView
    gestureFullScreenView = UITapGestureRecognizer(target: self, action: #selector(ViewController.takePhoto(_:)))
    self.fullScreenView.addGestureRecognizer(gestureFullScreenView)

    // add action to myView
    gestureView = UITapGestureRecognizer(target: self, action: #selector(ViewController.setFrontpage(_:)))
    self.view.addGestureRecognizer(gestureView)

    if (preview == true) {
        if let videoConnection = stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo) {
            // code for photo capture goes here...

            stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: { (sampleBuffer, error) -> Void in
                // process the image data (sampleBuffer) here to get an image file we can put in our view

                if (sampleBuffer != nil) {
                    let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                    let dataProvider = CGDataProviderCreateWithCFData(imageData)
                    let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault)
                    let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)

                    self.fullScreenView.hidden = true
                    self.fullScreenView.gestureRecognizers?.forEach(self.fullScreenView.removeGestureRecognizer)
                    self.session.stopRunning()

                    // save image to the library
                    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

                    imageViewBackground = UIImageView(frame: CGRectMake(0, 0, self.width, self.height))
                    imageViewBackground.image = image
                    imageViewBackground.tag = self.key

                    self.view.addSubview(imageViewBackground)
                }
            })
        }
    }
}

【问题讨论】:

    标签: ios swift camera


    【解决方案1】:

    使用AVCaptureSessionPresetHigh

    https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureSession_Class/index.html#//apple_ref/c/data/AVCaptureSessionPresetHigh

    然后你需要设置你的视频重力以全屏工作。

    captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    

    【讨论】:

    • 如果我想要全屏图片,则不适用于 iPad
    • 我刚刚在 Air 2 上进行了测试,它确实可以工作。你在用什么?
    • 我编辑了我的帖子,现在你看看我的样子
    • 您在照片上看到的是 AVCaptureVideoPreviewLayer,我想全屏显示它。使用 AVCaptureSessionPresetHigh 它不是全屏的,否则使用 AVCaptureSessionPreset640x480 它不是高分辨率而是全屏
    • 您可以设置预览的框架以后做任何预设的任何东西。只需创建一个全屏 UIView 和预览层。
    猜你喜欢
    • 2019-04-16
    • 2014-12-03
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多