如何在Swift中改变CIImage mask的大小作为blendKernel.apply函数的输入。

问题描述 投票:0回答:1

我尝试创建活发色面膜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



ios mask ciimage
1个回答
0
投票

我刚刚找到一个答案,并尝试了一下。请看下面的链接。按照建议,我把UIimage的大小调整为bounding square,然后转换为CIImage。所以现在它工作得很完美。

CIImage的范围是像素还是点?

© www.soinside.com 2019 - 2024. All rights reserved.