最基本的捕獲圖像
- 需要一個session:
let session = AVCaptureSession()
- 需要相機設備輸入,前置或者后置:
let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
for device in devices {
if device.position == position {
captureDevice = device as! AVCaptureDevice
}
}
position為init時指定的前置或者后置相機位置
- 現在有了相機設備,就可以獲得AVCaptureDeviceInput,將它設為session的輸入:
do {
input = try AVCaptureDeviceInput.init(device: captureDevice)
if session.canAddInput(input) {
session.addInput(input)
}
} catch {
print("add video input error")
}
}
- 如果獲得了相機使用權限,顯示相機圖像流簡單的方法是用AVCaptureVideoPreviewLayer:
previewLayer = AVCaptureVideoPreviewLayer.init(session: session)
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - kCameraBottomHeight - kNavigationHeight)
使用相機
- 初始化preset:
camera = SSCamera.init(sessionPreset: AVCaptureSessionPresetPhoto, position: .Front)
- 添加上previewLayer:
cameraView.preview.layer.addSublayer(camera.previewLayer)
拍完照圖像翻轉
- 相機在不同的方向拍照時,拍出的照片帶有方向信息,以前置拍照為例,如果想讓前置所見即所得,應該這樣:
outputImage = UIImage(CGImage: inputImage.CGImage!, scale: inputImage.scale, orientation: UIImageOrientation.LeftMirrored)
- 然后再來一次繪制,下面的方法會把圖片按照當前的方向繪制出來:
UIGraphicsBeginImageContext(size)
inputImage.drawInRect(CGRectMake(0,0, size.width, size.height))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
github地址
微信公眾號

開發(fā)者思維 devthinking
QQ交流群:295976280

iOS交流群(一)群二維碼.png