P9CameraManager
一个简单的用于处理iOS摄像头的库。
安装
您可以从我们的发布页面下载最新版本的框架文件。P9CameraManager 也可通过 Cocoapods 获取。要安装它,只需将以下行添加到您的 Podfile 中:pod 'P9CameraManager'
播放
您可以选择捕获照片或视频的起始模式。
开始预览并像这样拍照:
P9CameraManager.shared().startWithPreviewView(forPhoto: cameraView)
或者,视频。
P9CameraManager.shared().startWithPreviewView(forVideo: cameraView, enableAudio: false)
或者,选择自定义设置和预设。
P9CameraManager.shared().start(withPreviewView: cameraView, preset: AVCaptureSessionPreset3840x2160, enableVideo: true, enableAudio: false)
现在,拍照。
P9CameraManager.shared().captureStillImage { (status:P9CameraManagerStatus, image:UIImage?, fileUrl:URL?) in
if let image = image {
// do something you want.
}
}
另一种拍照的方式。它比 captureStillImage 提供的图像要小,但没有快门声。
P9CameraManager.shared().capturePreviewImage { (status:P9CameraManagerStatus, image:UIImage?, fileUrl:URL?) in
if let image = image {
// do something you want.
}
}
记录视频如下。
P9CameraManager.shared().recordVideo(toFileUrl: url)
停止记录。
P9CameraManager.shared().stopRecordingVideo({ (status, image, fileUrl) in
if let fileUrl = fileUrl {
// do something you want.
}
}
您可以通过设置预览处理程序来处理每一帧图像。
P9CameraManager.shared().setPreviewHandler { (sampleBuffer) in
let request = VNCoreMLRequest(model: model) { (finishedRequest, error) in
if let result = finishedRequest.results as? [VNClassificationObservation] {
let descriptions = result.prefix(2).map { classification in
return String(format: "%@ (%.2f)", classification.identifier, classification.confidence)
}
DispatchQueue.main.async {
self.desciptionLabel.text = descriptions.joined(seprator: "\n")
}
}
}
request.imageCropAndScaleOption = .centerCrop
if let sampleBuffer = sampleBuffer, let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
try? VNImageRequestHandler(cvPixelBuffer: imageBuffer, options: [:]).perform([request])
}
}
实用函数可以帮助您重新处理图像或视频。您可以使用实用函数通过指定宽度和高度以保持比率,自定义调整大小、裁剪中心正方形等来调整捕获的图像或视频。
P9CameraManager.shared().captureStillImage { (status:P9CameraManagerStatus, image:UIImage?, fileUrl:URL?) in
if let image = image {
P9CameraManager.processingImage(image, type: .cropCenterSquare, referenceSize: .zero, completion: { (status, image, fileUrl) in
if let image = image {
// do something you want.
}
})
}
}
P9CameraManager.shared().stopRecordingVideo({ (status, image, fileUrl) in
if let fileUrl = fileUrl {
P9CameraManager.processingVideo(fileUrl, toOutputFileUrl: outputFileUrl, type: .cropCenterSquare, referenceSize: .zero, preset: AVAssetExportPresetHighestQuality, completion: { (status, image, fileUrl) in
if let fileUrl = fileUrl {
// do something you want.
}
})
}
}
观察 P9CameraManager 事件来处理业务逻辑。
NotificationCenter.default.addObserver(self, selector:#selector(cameraManagerReport), name:NSNotification.Name(rawValue: P9CameraManagerNotification), object:nil)
例如,您可以得到预览图像的每一帧。
@objc func cameraManagerReport(notification:NSNotification) {
guard let userInfo = notification.userInfo, let status = P9CameraManagerStatus(rawValue: userInfo[P9CameraManagerNotifyParameterKeyStatus] as? Int ?? 0) else {
return
}
if status == .previewImageCaptured, let image = userInfo[P9CameraManagerNotifyParameterKeyImage] as? UIImage {
// do something you want.
}
}
您可以通过更改摄像头设备位置、视频方向、预览模式来进行所有这些操作。
许可协议
适用于MIT许可协议。 http://en.wikipedia.org/wiki/MIT_License