链接为 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
}
前景:
遮罩(与前景比例相同但大小不同):
结果(imageView背景颜色为蓝色):
但是我怎样才能在iOS 13下做到这一点呢?
谢谢
要支持 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 过滤器。您可以查看下面的文档以了解过滤器的概述。