[iOS]CIFilter滤镜

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    // 滤镜效果
    NSArray *operations = @[@"CILinearToSRGBToneCurve",
                            @"CIPhotoEffectChrome",
                            @"CIPhotoEffectFade",
                            @"CIPhotoEffectInstant",
                            @"CIPhotoEffectMono",
                            @"CIPhotoEffectNoir",
                            @"CIPhotoEffectProcess",
                            @"CIPhotoEffectTonal",
                            @"CIPhotoEffectTransfer",
                            @"CISRGBToneCurveToLinear",
                            @"CIVignetteEffect"];
    
    CGFloat width = self.view.frame.size.width/3;
    CGFloat height = self.view.frame.size.height/4;
    
    NSMutableArray *imageViews = [NSMutableArray arrayWithCapacity:0];
    
    for (int i = 0; i < [operations count]; i++)
    {
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:
                                  CGRectMake(i%3*width, i/3*height, width, height)];
        imageView.image = [UIImage imageNamed:@"timg.jpeg"];
        [imageViews addObject:imageView];
        [self.view addSubview:imageView];
    }
    
    dispatch_async(dispatch_get_global_queue(0, 0),^{
        
        NSMutableArray *images = [NSMutableArray arrayWithCapacity:0];
        
        for (int i = 0; i < [operations count]; i++)
        {
            UIImage *image = [UIImage imageNamed:@"timg.jpeg"];
            CIImage *cImage = [[CIImage alloc]initWithImage:image];
            
            //使用资源
            CIFilter *filter = [CIFilter filterWithName:operations[i]
                                          keysAndValues:kCIInputImageKey,cImage, nil];
            
            //使用默认参数
            [filter setDefaults];
            
            //生成上下文
            CIContext*context = [CIContext contextWithOptions:nil];
            
            //滤镜生成器输出图片
            CIImage *outputimage = [filter outputImage];
            
            //转换为UIImage
            CGImageRef ref = [context createCGImage:outputimage fromRect:[outputimage extent]];
            UIImage *temp = [UIImage imageWithCGImage:ref];
            
            [images addObject:temp];
            
            //释放
            CGImageRelease(ref);
        }
        
        dispatch_async(dispatch_get_main_queue(), ^{
            for (int x = 0; x < [images count]; x++)
            {
                UIImageView *imageView = imageViews[x];
                imageView.image = images[x];
            }
        });
    });
}

原图

添加滤镜后效果图

posted @ 2017-06-20 18:04  EverNight  阅读(651)  评论(0编辑  收藏  举报