在 IOS 中使用 AVFoundation 捕获相机图像和实时滤镜
Capture camera image along with live filters Using AVFoundation in IOS
我正在制作 Live Sticker 应用程序并使用 AVFoundation 捕获图像。
我遇到的问题是,当我保存图像时,它只保存图像而不是图像上的贴纸
我有 2 个问题
1=>用动态贴纸保存图像
2=> 将图像方向更改为纵向模式
相机预览图层代码I am getting just image not live sticker
I want to save image with sticker like shown in image but getting only image
func setupCameraPreview() {
self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
self.previewLayer.videoGravity = AVLayerVideoGravity.resizeAspect
let rootLayer = self.overlay.layer
rootLayer.masksToBounds = true
self.previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(self.previewLayer)
}
我正在使用此代码保存图像
private func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
let ciImage = CIImage(cvPixelBuffer: imageBuffer)
let context = CIContext()
guard let cgImage = context.createCGImage(ciImage, from: ciImage.extent) else { return nil }
return UIImage(cgImage: cgImage)
}
你必须连同叠加贴纸一起绘制图像。
假设您在 preview
视图中添加了贴纸。
image
是您从 imageFromSampleBuffer
或 stillImage
获得的图像
var imageView = UIImageView(image: image)
imageView.frame = preview.bounds
// imageView.contentMode = UIViewContentModeScaleAspectFit;
preview.addSubview(imageView)
preview.sendSubview(toBack: imageView)
var layer: CALayer? = preview.layer
UIGraphicsBeginImageContextWithOptions((layer?.frame.size)!, false, 0.0)
if let aContext = UIGraphicsGetCurrentContext() {
layer?.render(in: aContext)
}
var img: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.yourImageView.image = img
我正在制作 Live Sticker 应用程序并使用 AVFoundation 捕获图像。
我遇到的问题是,当我保存图像时,它只保存图像而不是图像上的贴纸
我有 2 个问题
1=>用动态贴纸保存图像
2=> 将图像方向更改为纵向模式
相机预览图层代码I am getting just image not live sticker
I want to save image with sticker like shown in image but getting only image
func setupCameraPreview() {
self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
self.previewLayer.videoGravity = AVLayerVideoGravity.resizeAspect
let rootLayer = self.overlay.layer
rootLayer.masksToBounds = true
self.previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(self.previewLayer)
}
我正在使用此代码保存图像
private func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
let ciImage = CIImage(cvPixelBuffer: imageBuffer)
let context = CIContext()
guard let cgImage = context.createCGImage(ciImage, from: ciImage.extent) else { return nil }
return UIImage(cgImage: cgImage)
}
你必须连同叠加贴纸一起绘制图像。
假设您在 preview
视图中添加了贴纸。
image
是您从 imageFromSampleBuffer
或 stillImage
var imageView = UIImageView(image: image)
imageView.frame = preview.bounds
// imageView.contentMode = UIViewContentModeScaleAspectFit;
preview.addSubview(imageView)
preview.sendSubview(toBack: imageView)
var layer: CALayer? = preview.layer
UIGraphicsBeginImageContextWithOptions((layer?.frame.size)!, false, 0.0)
if let aContext = UIGraphicsGetCurrentContext() {
layer?.render(in: aContext)
}
var img: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.yourImageView.image = img