我尝试创建活发色面膜IOS应用。我用 UIGraphicsGetImageFromCurrentImageContext()
函数来合并视频中的蒙版和背景。它可以工作,但图像质量不够好。我想把我的代码改成使用 blendKernel.apply(foreground: maskCI!, background: backgroundCI!)
功能。在这种情况下,遮罩的大小和位置与背景图像不匹配。遮罩图显示在背景图的右下角。我的背景图大小是1080x1080,蒙版图是224x224。请教一下,如何将蒙版和背景重叠?请看我下面的代码。
class IntegrateViewAndMask {
var blendKernel: CIBlendKernel { return .softLight }
func mergeMaskAndBackground(mask: UIImage, background: CVPixelBuffer, size: Int) -> UIImage? {
// Merge two images
// let sizeImage = CGSize(width: size, height: size)
// UIGraphicsBeginImageContext(sizeImage)
// let areaSize = CGRect(x: 0, y: 0, width: sizeImage.width, height: sizeImage.height)
// background
var background = UIImage(pixelBuffer: background)
// crop image to square 1080 x 1080
background = cropImageToSquare(image:background!)
// background?.draw(in: areaSize)
// mask
// mask.draw(in: areaSize)
let backgroundCI = CIImage(image: background!)
let maskCI = CIImage(image: mask)
let trialImage = blendKernel.apply(foreground: maskCI!, background: backgroundCI!)
let trialImageUI = UIImage(ciImage:trialImage!)
// let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
// UIGraphicsEndImageContext()
return trialImageUI
我刚刚找到一个答案,并尝试了一下。请看下面的链接。按照建议,我把UIimage的大小调整为bounding square,然后转换为CIImage。所以现在它工作得很完美。