• IOS图像处理(9)使用CoreImage滤镜


    CoreImage是IOS5中新增框架,通过这个框架我们可以轻松地对图片进行各种特效处理

    使用CoreImage的主要流程如下(需要添加CoreImage框架至项目中):

    1 创建CIContext,IOS系统提供了3种方法创建CIContext

    a.基于CPU

    CIContext *context = [CIContext contextWithOption:@{kCIContextUseSoftwareRenderer:@YES}];

    b.基于GPU

    CIContext *context = [CIContext contextWithOption:nil];

    最常用也是性能较好地一种方式,缺点是基于GPU的CIContext无法跨应用访问,比如打开UIImagePickerController选取图片,如果直接在委托方法中使用CIContext,将会自动降为基于CPU,所以可以在委托方法中保存图片,回到主类中调用CIContext进行处理

    c.基于OpenGL优化,可获得实时性能

    EAGLContext *eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    CIContext *context = [CIContext contextWithEAGLContext:eaglContext];

    2 创建CIFilter过滤器

    3 创建CIImage图片作为源图片,可以使用NSURL,UIImage以及NSData创建

    4 将CIImage设置为CIFilter的inputImage,同时根据不同的过滤器设置不同的参数

    5 通过CIFilter获取进过过滤器转换后的图片,图片格式为CIImage,通过CIContext可以得到CGImage

    以下例子展示了像素画的过滤器

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        //可以打印出所有的过滤器以及支持的属性
        NSArray *filters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
        for (NSString *filterName in filters) {
            CIFilter *filter = [CIFilter filterWithName:filterName];
            NSLog(@"%@,%@",filterName,[filter attributes]);
        }
        
        
        //创建基于GPU的CIContext
        CIContext *context = [CIContext contextWithOptions:nil];
        
        //创建过滤器
        CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"];
        
        //创建CIImage
        CIImage *sourceImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"]]];
        
        //将CIImage设为源图片
        [filter setValue:sourceImage forKey:@"inputImage"];
        
        //设置过滤参数(像素大小)
        [filter setValue:@15 forKey:@"inputScale"];
        
        //得到输出图片
        CIImage *outputImage = [filter outputImage];
        
        CGImageRef cgImage= [context createCGImage:outputImage fromRect:[UIScreen mainScreen].bounds];
        UIImage *image = [UIImage imageWithCGImage:cgImage];
        
        //调用了create创建,需要release
        CGImageRelease(cgImage);
        
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        [self.view addSubview:imageView];
        
    } 

  • 相关阅读:
    goj 天涯若比邻(最小与最大相邻素数)
    HTML5_CSS3可切换注册登录表单
    粒子效果进度条
    鼠标滑过抖动图标
    HTML5/CSS3鼠标滑过图片滤镜动画效果
    自定义抖动表单
    3D焦点图插件
    CSS3自定义Checkbox特效
    CSS3自定义下拉框菜单
    Flash+XML前后按钮超酷焦点图
  • 原文地址:https://www.cnblogs.com/zanglitao/p/4038359.html
Copyright © 2020-2023  润新知