2016-12-18 40 views
1

我正在完成这项任务,我们必须构建自定义相机功能并将图像存储到手机库中。所以,我还挺几乎达到了,直到照相机预览,但我还不确定如何拍摄和使用SWIFT 3.使用swift在iOS中存储捕获的图像3

这里的源代码存储图像:

var captureSession = AVCaptureSession() 
var sessionOutput = AVCapturePhotoOutput() 
var previewLayer = AVCaptureVideoPreviewLayer() 






override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 


override func viewWillAppear(_ animated: Bool) { 

    super.viewWillAppear(animated) 
    self.navigationController?.setNavigationBarHidden(true, animated: false) 

    let deviceSession = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInWideAngleCamera, .builtInDuoCamera,.builtInTelephotoCamera], mediaType: AVMediaTypeVideo, position: .unspecified) 

    for device in (deviceSession?.devices)! { 

     if device.position == AVCaptureDevicePosition.back { 

      do { 

       let input = try AVCaptureDeviceInput.init(device: device) 

       if captureSession.canAddInput(input) { 

        captureSession.addInput(input) 

        if captureSession.canAddOutput(sessionOutput) { 

         captureSession.addOutput(sessionOutput) 
         previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
         previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
         previewLayer.connection.videoOrientation = .portrait 

         cameraLayerView.layer.addSublayer(previewLayer) 
         cameraLayerView.addSubview(topControllerView) 
         cameraLayerView.addSubview(bottomControllerView) 


         previewLayer.position = CGPoint(x: self.cameraLayerView.frame.width/2, y: self.cameraLayerView.frame.height/2) 
         previewLayer.bounds = cameraLayerView.frame 

         captureSession.startRunning() 

        } 
       } 
      } catch let avError { 
       print(avError) 
      } 
     } 
    } 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



override func viewWillDisappear(_ animated: Bool) { 

    self.navigationController?.setNavigationBarHidden(false, animated: false) 
} 



@IBAction func galleryAction(_ sender: UIButton) { 

    // This part shows the thumbnail of a current image been taken 
} 



@IBAction func captureAction(_ sender: UIButton) { 

    // This is the part i have capture the image 

} 

回答

2

以它真的很简单的图片,看看here。 呈现图像拾取:

func takePhoto(sender: UIButton) { 
    imagePicker = UIImagePickerController() 
    imagePicker.delegate = self 
    imagePicker.sourceType = .Camera 

    presentViewController(imagePicker, animated: true, completion: nil) 
} 

获取拍摄/所选图像:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { 
    imagePicker.dismissViewControllerAnimated(true, completion: nil) 
    imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
} 

现在,保存的UIImage到相册可以像做解释here。 下面的调用将保存的照片画廊并调用完成处理程序:

UIImageWriteToSavedPhotosAlbum(yourImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 

的处理程序是这样的:

func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) { 
    if let error = error { 
     // error 
    } else { 
     // no error 
    } 
} 
+0

晴简化的方式感谢会尝试一下,并提供反馈@BogdanFarca –

+0

除了使用ImagePicker控制器,我希望实现一个自定义相机是否有任何资源可以提供@BogdanFarca –

+1

@SharkesMonken:关于如何在这里实现自定义相机有一个很好的解释:https://github.com/ codepath/ios_guides/wiki/Creating-a-Custom-Camera-View –

相关问题