将图像 (UIImageView) 叠加到照片中

Overlay an image (UIImageView) into photo

有没有办法在拍照时集成一个UIImageView?

我好像找不到讨论这个的话题。

我想做的是在预览上叠加一个 UIImageView。当按下快门时,它应该拍摄嵌入了 UIImageView 的照片。

这就是我现在所在的位置。 "test image" 部分将可以拖动到预览视图的顶部。我想在我按下快门按钮时拍摄的图像中包含该图像。

这可能吗?或者有更好的方法吗?

我正在使用 AVCaptureVideoPreviewLayer、AVCaptureSession 和 AVCapturePhotoOutput。我只是将 UIIMageView 放在 UIView 之上,其中 AVCaptureVideoPreviewLayer 也是一个子视图。

编辑:测试将 UIView 保存为图像,它不包括预览层(仅 returns UIView + UIImageView 覆盖)。

至少有两种方法可以做到这一点。

1) 从相机捕获照片并根据可拖动图像视图位置添加叠加图像。这将产生最佳质量。

2) 如果您不需要照片质量,您可以使用另一种解决方案 - 在图形上下文和视频预览层中渲染可拖动视图层:

func takePhotoWithOverlay() -> UIImage? {
    let overlayImageView // UIImageView with overlay image
    let videoPreviewLayer // AVCaptureVideoPreviewLayer

    guard let superview = overlayImageView.superview else { return nil }

    UIGraphicsBeginImageContextWithOptions(superview.bounds.size, false, 0.0)
    defer { UIGraphicsEndImageContext() }

    guard let context = UIGraphicsGetCurrentContext() else { return nil }

    videoPreviewLayer.render(in: context)
    overlayImageView.layer.render(in: context)

    return UIGraphicsGetImageFromCurrentImageContext()
}