P9CameraManager 2.0.2

P9CameraManager 2.0.2

Tae Hyun Na 维护。



  • Tae Hyun Na

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