音视频

CoreImage(二)CIFilter滤镜效果使用

2018-01-31  本文已影响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图
上一篇下一篇

猜你喜欢

热点阅读