涉及 alpha 时 CISourceOverCompositing 的意外结果

Unexpected result of CISourceOverCompositing when alpha is involved

当尝试使用 CoreImage 在 iOS 上将具有 60% alpha 通道的图像放置在另一个具有 100% alpha 通道的图像上时,我得到了我没有预料到的结果。如果我拍摄两张图片并将 scene_2_480p 放在 scene_480p 上,如下所示:

let back: CIImage = loadImage("scene_480p", type: "jpg");
let front: CIImage = loadImage("scene_2_480p", type: "png");
let composeFilter: CIFilter = CIFilter(name: "CISourceOverCompositing");
composeFilter.setDefaults();
composeFilter.setValue(front, forKey: kCIInputImageKey);
composeFilter.setValue(back, forKey: kCIInputBackgroundImageKey);
let result: CIImage = composeFilter.outputImage;

我明白了:

如果我对 gimp 做同样的事情,并将相同的两个图像放在两个重叠层上,我得到:

结果很接近,但不一样。任何人都可以解释为什么结果不一样以及如何获得相同的 gimp 结果?

这些是我使用的原始图像:

我仍然无法回答 "why" 问题,但通过使用 this 可以获得正确的结果,并具有适当的 alpha 值。必须将比例设置为 1.0 才能获得相同的结果。