【问题标题】:Add CIFilter overlay over UIImage在 UIImage 上添加 CIFilter 覆盖
【发布时间】:2014-05-10 09:04:12
【问题描述】:

我有以下代码模糊了我的 UIImage。在UIImage上加了模糊后,我还想在UIImage上加一个不透明度75%的黑屏,然后将这两种效果(模糊和黑屏)合并到一个UIImage中。

提前谢谢你!

CIFilter *gaussianBlurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
                        [gaussianBlurFilter setDefaults];
                        [gaussianBlurFilter setValue:[CIImage imageWithCGImage:[bgPicture CGImage]] forKey:kCIInputImageKey];
                        [gaussianBlurFilter setValue:@0.7 forKey:kCIInputRadiusKey];
                        CIImage *outputImage = [gaussianBlurFilter outputImage];
                        CIContext *context  = [CIContext contextWithOptions:nil];
                        CGRect rect = [outputImage extent];
                        rect.origin.x   += (rect.size.width - bgPicture.size.width ) / 2;
                        rect.origin.y   += (rect.size.height - bgPicture.size.height) / 2;
                        rect.size   = bgPicture.size;

                        CGImageRef cgimg    = [context createCGImage:outputImage fromRect:rect];
                        UIImage *image  = [UIImage imageWithCGImage:cgimg];
                        CGImageRelease(cgimg);
                        _profilePhotos[username] = image;

试过这个(不知道我在 UIColor 中插入了哪个值):

CIImage* filterInputImage = [CIImage imageWithCGImage:image.CGImage];

                        CIFilter* filter = [CIFilter filterWithName:@"CIConstantColorGenerator"];
                        [filter setValue:[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:.75] forKey:kCIInputColorKey];
                        [filter setValue:filterInputImage forKey:kCIInputImageKey];

                        CIImage* filterOutputImage = filter.outputImage;

                        CIContext* ctx = [CIContext contextWithOptions:nil];
                        CGImageRef createdImage = [ctx createCGImage:filterOutputImage fromRect:filterOutputImage.extent];

                        UIImage* outputImages = [UIImage imageWithCGImage:createdImage];

                        _profilePhotos[username] = outputImages;

【问题讨论】:

  • 您遇到了哪些问题?你知道如何组合过滤器吗?
  • 哦,抱歉,还有一个问题:这里的“组合”是什么意思?
  • 嗨,抱歉,我只是不知道如何使用 CIFilter 在 UIImage *image 上添加 75% 不透明度的黑屏。
  • 结合我的意思是最后有一个 UIImage,我可以说加载到 UIImageView 中。
  • CIConstantColorGenerator 将为您提供 75% 不透明度的黑屏。然后使用 CICategoryCompositeOperation 将其与原始图像混合。

标签: ios sdk cifilter


【解决方案1】:

Apple 在 UIImage 上发布了一个可以做到这一点的类别,并且只需要一行代码:

UIImage *newImage = [image applyBlurWithRadius:0.7 tintColor:[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:.75] saturationDeltaFactor:0.0 maskImage:nil];

甚至还有一个添加暗色调的辅助方法:

- (UIImage *)applyDarkEffect;

还有一个采用浅色并将其设置为 60% 的颜色:

- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor;

在 github 上:https://github.com/codefellows/sea-b4-ios/tree/master/UIImageEffects

【讨论】:

  • 你确定是Apple发布的吗?
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多