将图像 (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()
}
有没有办法在拍照时集成一个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()
}