美文网首页音视频
CoreImage(二)CIFilter滤镜效果使用

CoreImage(二)CIFilter滤镜效果使用

作者: 深圳张学友 | 来源:发表于2018-01-31 15:22 被阅读161次

    CIFilter滤镜效果使用

    CIFilter是使用CoreImage进行滤镜效果的核心类,通过这个类设置(KVC设置)需要的效果和属性,对图片进行细节处理。

    滤镜效果

    API一共提供了以下的效果分类,每个效果分类又有很多具体子分类,网上也没有找到每个效果介绍,只能查看苹果官方文档,用我四级的英语水平结合实用大概翻译了下...(大部分翻译不准确可随意吐槽)

    //失真效果 改变几何形状创建3D效果
    CORE_IMAGE_EXPORT NSString * const kCICategoryDistortionEffect;
    //扭曲图片和纠正源图像问题,例如仿射变换来校正相对于地平线旋转的图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryGeometryAdjustment;
    //合成滤镜,操作两个图像源
    CORE_IMAGE_EXPORT NSString * const kCICategoryCompositeOperation;
    //半色调效果
    CORE_IMAGE_EXPORT NSString * const kCICategoryHalftoneEffect;
    //色彩调整,用于消除色彩偏移、校正亮度和对比度
    CORE_IMAGE_EXPORT NSString * const kCICategoryColorAdjustment;
    //修改图像颜色,我们一般用的比较多,类似美图工具的滤镜效果
    CORE_IMAGE_EXPORT NSString * const kCICategoryColorEffect;
    //
    CORE_IMAGE_EXPORT NSString * const kCICategoryTransition;
    //瓦片效果 平铺图片
    CORE_IMAGE_EXPORT NSString * const kCICategoryTileEffect;
    //产生图案的过滤器,如纯色、棋盘或星星的光泽。生成的输出通常用作对另一个过滤器的输入。
    CORE_IMAGE_EXPORT NSString * const kCICategoryGenerator;
    //减少图像数据 解决图像分析问题
    CORE_IMAGE_EXPORT NSString * const kCICategoryReduction NS_AVAILABLE(10_5, 5_0);
    //渐变效果
    CORE_IMAGE_EXPORT NSString * const kCICategoryGradient;
    //绘画风格
    CORE_IMAGE_EXPORT NSString * const kCICategoryStylize;
    //锐化图像 锐化掩模和提高亮度。
    CORE_IMAGE_EXPORT NSString * const kCICategorySharpen;
    //柔滑图像,主要用于模糊图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryBlur;
    //处理视频图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryVideo;
    //处理静态图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryStillImage;
    //处理交错图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryInterlaced;
    //处理非方形图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryNonSquarePixels;
    //处理高动态图像
    CORE_IMAGE_EXPORT NSString * const kCICategoryHighDynamicRange;
    //用于区分built-in filters  plug-in filters.
    CORE_IMAGE_EXPORT NSString * const kCICategoryBuiltIn;
    //链接几个过滤器
    CORE_IMAGE_EXPORT NSString * const kCICategoryFilterGenerator NS_AVAILABLE(10_5, 9_0);
    

    具体滤镜名字

    上面的是一个大滤镜类型,我们代码中使用的是具体的某个滤镜名字,可用代码获取所有滤镜的名字

    //获取kCICategoryStylize类型所有滤镜的名字和属性设置
      NSArray* filters =  [CIFilter filterNamesInCategory:kCICategoryStylize];
        for (NSString* filterName in filters) {
            NSLog(@"filter name:%@",filterName);
            // 我们可以通过filterName创建对应的滤镜对象
            CIFilter* filter = [CIFilter filterWithName:filterName];
            NSDictionary* attributes = [filter attributes];
            // 获取属性键/值对(在这个字典中我们可以看到滤镜的属性以及对应的key)
            NSLog(@"filter attributes:%@",attributes);
        }
    

    使用方法

    1.创建CIImage
    2.创建CIFilter滤镜
    3.用kvc给CIFilter设置属性(或者可调用setdefault设置默认属性)
    4.创建CIContext上下文
    5.初始化CGImageRef对象,赋给UIImage对象

        //获取图片 
        CIImage *image = [CIImage imageWithCGImage:[_image CGImage]];
        //创建CIFilter CIMinimumComponent黑白 CIPhotoEffectFade相册
        CIFilter *filter = [CIFilter filterWithName:@"CIMinimumComponent"
        [filter setValue:image forKey:kCIInputImageKey];
        //进行默认设置
        [filter setDefaults];
        //创建CIContext对象
        CIContext *context = [CIContext contextWithOptions:nil];
        //创建处理后的图片
        CIImage *resultImage = filter.outputImage;
        CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
        UIImage *resultImg = [UIImage imageWithCGImage:imageRef];
        [_imageView setImage:resultImg];
        CFRelease(imageRef);
    
    
    原图
    黑白效果
    相片效果

    Demo

    Demo地址:CIFilter滤镜效果使用
    demo中有具体滤镜的使用方式,图片的保存。 提供了一些常用的滤镜的效果,二维码和条形码生成的方法,滤镜的叠加使用。

    demo图

    相关文章

      网友评论

        本文标题:CoreImage(二)CIFilter滤镜效果使用

        本文链接:https://www.haomeiwen.com/subject/bcxlzxtx.html