我有一个捕获输出委托方法:
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
let filter = CIFilter(name: "CIColorControls")
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
let cameraImage = CIImage(cvPixelBuffer: pixelBuffer!)
filter?.setValue(cameraImage, forKey: kCIInputImageKey)
filter?.setValue(0.0, forKey: kCIInputSaturationKey)
let filteredImage = UIImage(ciImage: filter!.value(forKey: kCIOutputImageKey) as! CIImage!, scale: 1.0, orientation: UIImageOrientation.right)
DispatchQueue.main.async {
self.cameraView.image = filteredImage
}
}
在这里我给我的实时预览图像添加了滤镜。但是如果我尝试通过这个方法从图像创建NSData: UIImagePNGRepresentation()它返回nil,我不知道为什么。如果我使用CameraViewController所有工作完美,所以我认为问题是在AVFoundation。任何建议吗?
问题是UIImage(ciImage:)
不将CIImage转换为正常的UIImage。你需要在CGImage的支持下渲染成一个普通的UIImage。