使用swift在iOS中存储捕获的图像3
问题描述:
我正在完成这项任务,我们必须构建自定义相机功能并将图像存储到手机库中。所以,我还挺几乎达到了,直到照相机预览,但我还不确定如何拍摄和使用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
}
答
以它真的很简单的图片,看看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
}
}
晴简化的方式感谢会尝试一下,并提供反馈@BogdanFarca –
除了使用ImagePicker控制器,我希望实现一个自定义相机是否有任何资源可以提供@BogdanFarca –
@SharkesMonken:关于如何在这里实现自定义相机有一个很好的解释:https://github.com/ codepath/ios_guides/wiki/Creating-a-Custom-Camera-View –