How to capture picture with AVCaptureSession in Swift? How to capture picture with AVCaptureSession in Swift? ios ios

How to capture picture with AVCaptureSession in Swift?


AVCaptureSession Sample

import UIKitimport AVFoundationclass ViewController: UIViewController {    let captureSession = AVCaptureSession()    let stillImageOutput = AVCaptureStillImageOutput()    var error: NSError?    override func viewDidLoad() {        super.viewDidLoad()        let devices = AVCaptureDevice.devices().filter{ $0.hasMediaType(AVMediaTypeVideo) && $0.position == AVCaptureDevicePosition.Back }        if let captureDevice = devices.first as? AVCaptureDevice  {            captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &error))            captureSession.sessionPreset = AVCaptureSessionPresetPhoto            captureSession.startRunning()            stillImageOutput.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG]            if captureSession.canAddOutput(stillImageOutput) {                captureSession.addOutput(stillImageOutput)            }            if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {                previewLayer.bounds = view.bounds                previewLayer.position = CGPointMake(view.bounds.midX, view.bounds.midY)                previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill                let cameraPreview = UIView(frame: CGRectMake(0.0, 0.0, view.bounds.size.width, view.bounds.size.height))                cameraPreview.layer.addSublayer(previewLayer)                cameraPreview.addGestureRecognizer(UITapGestureRecognizer(target: self, action:"saveToCamera:"))                view.addSubview(cameraPreview)            }        }    }    func saveToCamera(sender: UITapGestureRecognizer) {        if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) {            stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) {                (imageDataSampleBuffer, error) -> Void in                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)                 UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData), nil, nil, nil)            }        }    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()    }}

UIImagePickerController Sample

import UIKitclass ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {    let imagePicker = UIImagePickerController()    @IBOutlet weak var imageViewer: UIImageView!    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {            dismissViewControllerAnimated(true, completion: nil)             imageViewer.image = image    }    @IBAction func presentImagePicker(sender: AnyObject) {        if UIImagePickerController.isCameraDeviceAvailable( UIImagePickerControllerCameraDevice.Front) {            imagePicker.delegate = self            imagePicker.sourceType = UIImagePickerControllerSourceType.Camera            presentViewController(imagePicker, animated: true, completion: nil)        }    }}


As AVCaptureStillImageOutput is deprecated, I created another Swift example of using AVCaptureSession and AVCapturePhotoOutput in iOS 10. Check this out.