使用 CIFilter(CISourceOverCompositing) 组合两个图像时,丢失 alpha 通道

Lin*_*inc 5 objective-c core-image ios cifilter

我想将动画添加到图像并生成为视频,因此我尝试将背景图像(CIImage)和动画帧之一(CIImage)与 CISourceOverCompositing 过滤器合并,但我发现所有透明图像(动画帧)不再透明,所有的 alpha 值都被四舍五入(<0.5->0.0,>=0.5->1.0)。也许我选择了错误的过滤器,但我找不到合适的过滤器来满足我的要求。有什么好的建议吗?无论如何,谢谢你的帮助。

我写了一个非常简单的示例代码:

- (void)generateSampleImage {
CIImage *background = [CIImage imageWithContentsOfURL:
                       [[NSBundle mainBundle] URLForResource:@"background" withExtension:@"png"]];
CIImage *foreground = [CIImage imageWithContentsOfURL:
                       [[NSBundle mainBundle] URLForResource:@"foreground" withExtension:@"png"]];




CIFilter *filter = [CIFilter filterWithName:@"CISourceOverCompositing"];
[filter setValue:background forKey:kCIInputBackgroundImageKey];
[filter setValue:foreground forKey:kCIInputImageKey];
CIImage *outputImage = [filter outputImage];
self.imageView.image = [self imageWithCIImage:outputImage];




NSURL *baseUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
                                                         inDomains:NSUserDomainMask] objectAtIndex:0];
NSURL *outputUrl = [baseUrl URLByAppendingPathComponent:@"output_image.png"];
[UIImagePNGRepresentation(self.imageView.image) writeToFile:outputUrl.path atomically:YES];
}
Run Code Online (Sandbox Code Playgroud)

要结合的背景图像: 要结合的背景图像 要结合的前景图像: 要结合的前景图像 带有 CISourceOverCompositing 过滤器的输出图像: 带有 CISourceOverCompositing 过滤器的输出图像 我想要的理想形象: 我想要的理想形象