首页 > 解决方案 > AVCaptureVideoPreviewLayer 在 iOS 中添加叠加层和捕捉照片

问题描述

最初的想法是通过 启动相机流AVCaptureSession,在该 raw 中找到面孔,CMSampleBuffer然后添加一些图像作为图层AVCaptureVideoPreviewLayer,然后截取屏幕截图。

完成后,后来发现UIGraphicsGetImageFromCurrentImageContext无法使用AVCaptureVideoPreviewLayer,所以截图不能解决我的目的。

所以我使用MetalandMTKView来执行一些实时渲染,结果与 CoreImage Filters 和 Metal 的组合很好。我已经知道如何检测面部并使用内置的 CoreImage 过滤器更改面部的那部分,但我找不到合适的方法将图像添加到另一个图像上。

如何在背景图像中的定位方面混合两个图像?我有 CIImage 可以使用。

标签: iosswiftavfoundationmetalcore-image

解决方案


您可以将叠加层加载到 中CIImage,然后使用transformed(by matrix: CGAffineTransform)将其移动到面部位置,最后使用composited(over dest: CIImage)将其混合到CIImage来自视频缓冲区的 中。您可能需要做一些工作才能在不同的坐标空间之间进行转换。

还有很多更复杂的合成过滤器可用。查看类别中的过滤器。CICategoryCompositeOperation


推荐阅读