将 CIImage 模糊为 CALayer 内容图像

Blur CIImage as a CALayer Content image

我正在使用波纹管代码进行图像模糊处理。 'resultImage' 显示模糊图像,但是当我把它放在 CALayer 内容上时它什么也没有显示。

CIImage *imageToBlur = [CIImage imageWithCGImage:image.CGImage];
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"];
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
self.contents = resultImage;

您不能将 CIImage 用作 CALayer 的内容。可能存在一些 VRM 问题。我不再关心它了。顺便说一下,您可以使用 CGImageRef 而不是 CIImage。根据您的代码,您可以做的事情...

CIImage *imageToBlur = [CIImage imageWithCGImage:image.CGImage];
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"];
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
CIContext *cont = [CIContext contextWithOptions:nil];
CGImageRef img = [cont createCGImage:resultImage fromRect:CGRectMake(0, 0, image.size.width, image.size.height)];
self.contents = (__bridge id)img;

希望有用!