iOS有关图片处理 图片的饱和度,亮度,对比度

      在做图片处理的时候,会遇到调节图片的饱和度的问题,这里就要用到Core Image这个框架,Core Image是一个很强大的框架。它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光。它利用GPU(或者CPU,取决于客户)来非常快速、甚至实时地处理图像数据和视频的帧。多个CoreImage滤镜可以叠加在一起,从而可以一次性地产生多重滤镜效果。这种多重滤镜的优点在于它可以生成一个改进的滤镜,从而一次性的处理图像达到目标效果,而不是对同一个图像顺序地多次应用单个滤镜。每一个滤镜都有属于它自己的参数。这些参数和滤镜信息,比如功能、输入参数等都可以通过程序来查询。用户也可以来查询系统从而得到当前可用的滤镜信息。到目前为止,Mac上只有一部分CoreImage滤镜可以在iOS上使用。但是随着这些可使用滤镜的数目越来越多,API可以用来发现新的滤镜属性。

下面是这个框架下的几个重要的类

CIContext:所有的图像处理都是在一个CIContext中完成的。

CIImage 这个类保存图像数据,它可以从UIImage,图像文件或者是像素数据中构造出来。

CIFilter:滤镜类总保函一个字典结构,对各种滤镜定义了属于他们各自的属性,滤镜有很多种,比如鲜艳程度的滤镜,色彩反转滤镜,剪裁滤镜等等。

用下面的我们来试试修改一张图片的饱和度,亮度,对比度。

首先用到的是CIFilter 我们可以通过字典来看看里面所有的

        NSArray *cifilter = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
        
        NSLog(@"FilterName:\n%@,,,===%ld", cifilter,cifilter.count);//显示所有过滤器名字
        
        for (NSString *filterName in cifilter) {
            
            CIFilter *fltr = [CIFilter filterWithName:filterName];//用一个过滤器名字生成一个过滤器CIFilter对象
            
            NSLog(@"%@:\n%@", filterName, [fltr attributes]);//这个过滤器支持的属性
            
        }

可以看见多有的属性

今天我们用到是滤镜名称是CIColorControls

/

    CIAttributeFilterDisplayName = "Color Controls";
    CIAttributeFilterName = CIColorControls;
    inputBrightness =     {
        CIAttributeClass = NSNumber;
        CIAttributeDefault = 0;
        CIAttributeIdentity = 0;
        CIAttributeSliderMax = 1;
        CIAttributeSliderMin = "-1";
        CIAttributeType = CIAttributeTypeScalar;
    };
    inputContrast =     {
        CIAttributeClass = NSNumber;
        CIAttributeDefault = 1;
        CIAttributeIdentity = 1;
        CIAttributeSliderMax = 4;
        CIAttributeSliderMin = 0;
        CIAttributeType = CIAttributeTypeScalar;
    };
    inputImage =     {
        CIAttributeClass = CIImage;
        CIAttributeType = CIAttributeTypeImage;
    };
    inputSaturation =     {
        CIAttributeClass = NSNumber;
        CIAttributeDefault = 1;
        CIAttributeIdentity = 1;
        CIAttributeSliderMax = 2;
        CIAttributeSliderMin = 0;
        CIAttributeType = CIAttributeTypeScalar;
    };

/

上面是这个滤镜的名称和属性

下面是具体的修改图片的饱和度亮度和对比度的代码

    CIImage *beginImage = [CIImage imageWithCGImage:image.CGImage];
    CIFilter * filter = [CIFilter filterWithName:@"CIColorControls"];
    [filter setValue:beginImage forKey:kCIInputImageKey];
    //  饱和度      0---2
    [filter setValue:[NSNumber numberWithFloat:0.5] forKey:@"inputSaturation"];
    //  亮度  10   -1---1
    [filter setValue:[NSNumber numberWithFloat:0.5] forKey:@"inputBrightness"];
    //  对比度 -11  0---4
    [filter setValue:[NSNumber numberWithFloat:2] forKey:@"inputContrast"];
    
    // 得到过滤后的图片
    CIImage *outputImage = [filter outputImage];
    // 转换图片, 创建基于GPU的CIContext对象
    CIContext *context = [CIContext contextWithOptions: nil];
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *newImg = [UIImage imageWithCGImage:cgimg];
    // 显示图片
    [_imageV setImage:newImg];
    // 释放C对象
    CGImageRelease(cgimg);

这样就达到了修改图片属相的目的,大家可以学习一下

这个是苹果官方的关于coreImage 的介绍

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImagingRef/_index.html#//apple_ref/doc/uid/TP40001171

这个是另一个网友写的,我觉的不错,大家也可以看看。

http://blog.sina.com.cn/s/blog_83c2dd090101j5n5.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值