2016-12-18 2 views
1

저는 맞춤 카메라 기능을 만들고 전화 갤러리에 이미지를 저장해야하는이 지정 작업을하고 있습니다. , 정말 간단 사진을 촬영스위프트를 사용하여 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

: 그래서 내가 좀 거의 카메라 미리보기까지했다하지만 난 캡처하고

3. 신속 여기 소스 코드의 사용하여 이미지를 저장하는 방법을 아직 확실하지 않다 보세요 here. here 설명처럼 할 수있는 사진 앨범에있는 UIImage 저장, 지금

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

:

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

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

촬영 한/선택한 이미지를 얻기 : 이미지 선택 도구를 제공합니다. 다음 호출이 완료 핸들러를 갤러리에 사진을 저장하고 호출합니다 :

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

대부분 간단한 방법 덕분에 그것을 밖으로 시도하고 –

+0

@BogdanFarca 피드백을 제공 할 것입니다 ImagePicker 컨트롤러를 사용하는 것 외에도 맞춤 카메라를 구현하고자하는 리소스가 있습니다. @BogdanFarca –

+1

@SharkesMonken : 여기에 맞춤 카메라를 구현하는 방법에 대한 아주 좋은 설명이 있습니다. https://github.com/ codepath/ios_guides/wiki/Creating-a-Custom-Camera-View –