我有一个来自 YUV 数据的
CIImage
,没有 alpha 平面,以及一个灰度的 CIImage
。我想使用第二张图像作为 alpha 平面。目前,gpt 告诉我使用 CISourceOverCompositing
滤镜,但似乎该滤镜会混合第二个图像的颜色。如果我将灰度图像转换为黑色蒙版 (0, 0, 0, alpha),则此滤镜将使用黑色作为“背景色”。但是,我只想替换颜色而不是与另一种颜色混合。
您可以使用灰度图像作为蒙版将彩色图像与透明图像混合:
CIImage* clearBackground = [[CIImage clearImage] imageByCroppingToRect:colorImage.extent];
CIFilter* blendFilter = [CIFilter filterWithName:@"CIBlendWithMask"];
[blendFilter setValue:colorImage forKey:kCIInputImageKey];
[blendFilter setValue:clearBackground forKey:kCIInputBackgroundImageKey];
[blendFilter setValue:grayscaleImage forKey:kCIInputMaskImageKey];
CIImage* output = [blendFilter outputImage];