【问题标题】:How can I combine two CIImages with alpha?如何将两个 CIImage 与 alpha 结合起来?
【发布时间】:2021-09-05 09:31:20
【问题描述】:

在我的项目中,我想将两个 CIImage 组合在一起。 为此,我使用“CISourceInCompositing”

if let currentFilter = CIFilter(name: "CISourceInCompositing") {


        let bgImage = inputImage
        var filterImage = resizeCIImage(image: filterImage, newWSize: bgImage.extent.size)

        filterImage = setOpacity(image: filterImage, alpha: opacity)

        currentFilter.setValue(filterImage, forKey: kCIInputImageKey)
        currentFilter.setValue(bgImage, forKey: kCIInputBackgroundImageKey)

        guard let outputImage = currentFilter.outputImage else {
            return CIImage()
        }
                        
        return outputImage
    }

但我想改变“kCIInputImageKey”的不透明度 所以我用这个方法:

func setOpacity (image : CIImage, alpha : Double) ->CIImage {
        
        guard let overlayFilter: CIFilter = CIFilter(name: "CIColorMatrix") else { fatalError() }
        let overlayRgba: [CGFloat] = [0, 0, 0, alpha]
        let alphaVector: CIVector = CIVector(values: overlayRgba, count: 4)
        overlayFilter.setValue(image, forKey: kCIInputImageKey)
        overlayFilter.setValue(alphaVector, forKey: "inputAVector")
        
        return overlayFilter.outputImage!
    }

但我得到的图像与我想要的不同:

你有什么解决办法吗? 谢谢

【问题讨论】:

    标签: swift image-processing core-image cifilter ciimage


    【解决方案1】:

    您应该使用CISourceOverCompositing 而不是CISourceInCompositing

    CISourceInCompositing的定义:

    Uses the background image to define what to leave in the input image, effectively cropping the input image.
    

    CISourceOverCompositing的定义

    Places the input image over the input background image.
    

    在此处查看其他 CoreImage 复合操作的信息和示例输出:https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CISourceOverCompositing

    【讨论】:

    • 我使用了“CISourceInCompositing”,因为我需要过滤没有背景的 PNG 图像。使用“CISourceOverCompositing”,透明部分也被过滤器覆盖。但是我在“CISourceOverCompositing”之后添加了一个混合功能来掩盖图像。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多