iOS 13下如何像WWDC分割一样将图像与遮罩混合?

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

链接为 https://developer.apple.com/videos/play/wwdc2021/10040/ 时间为 12:20。

我已经在 iOS 13 上达到了这个目标

func blendImages(
      background: CIImage,
      mask: CIImage,
      isRedMask: Bool = true
    ) -> CIImage? {

        print("blendImages")
        print(foreground.extent.size)
        print(mask.extent.size)
      // scale mask
      let maskScaleX = foreground.extent.width / mask.extent.width
      let maskScaleY = foreground.extent.height / mask.extent.height
      let maskScaled = mask.transformed(by: __CGAffineTransformMake(maskScaleX, 0, 0, maskScaleY, 0, 0))



      let blendFilter = isRedMask ? CIFilter.blendWithRedMask() : CIFilter.blendWithMask()
      blendFilter.inputImage = foreground
      blendFilter.maskImage = maskScaled

      return blendFilter.outputImage
    }

前景:

1

遮罩(与前景比例相同但大小不同):

2

结果(imageView背景颜色为蓝色):

3

但是我怎样才能在iOS 13下做到这一点呢?

谢谢

ios core-graphics core-image
1个回答
0
投票

要支持 iOS 12 及更早版本,您可以尝试以下操作:

if let blendFilter = CIFilter(name: "CIBlendWithMask") {                
        blendFilter.setValue(foreground, forKey: kCIInputImageKey)
        blendFilter.setValue(background, forKey: kCIInputBackgroundImageKey)
        blendFilter.setValue(maskScaled, forKey: kCIInputMaskImageKey)
                        
        return blendFilter.outputImage
}

您可以按名称实例化 Core Image 过滤器。您可以查看下面的文档以了解过滤器的概述。

https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html

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