CoreImage(二)CIFilter滤镜效果使用

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图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,087评论 19 139
  • 前几天,在朋友圈看到一篇文章:《为什么中国白领患有“体检恐惧症”?》,文章本身姑且不论,文后的跟帖倒是耐人寻味。 ...
    谈心社阅读 26,035评论 125 617
  • “知识的诅咒”概念:当一个人知道一件事后,他就无法想象自己是不知道这件事的。 比如 原著党知道原著的内容,并且喜欢...
    大大大大大头哥哥阅读 399评论 0 0
  • 终于和一个神交已久的女生正式认识,聊起来发现俩个人相似的地方不止是来回同一班车。住同一个小区,每天同一个时间搭乘同...
    锺琬阅读 291评论 0 0