zoukankan      html  css  js  c++  java
  • 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:
    %@,,,===%ld", cifilter,cifilter.count);//显示全部过滤器名字
            
            for (NSString *filterName in cifilter) {
                
                CIFilter *fltr = [CIFilter filterWithName:filterName];//用一个过滤器名字生成一个过滤器CIFilter对象
                
                NSLog(@"%@:
    %@", 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







  • 相关阅读:
    linux中ll和du的区别
    django+celery+redis环境搭建
    python中若干错误
    js正则表达式中匹配反引号
    yii学习小结
    linux下DNS设置以及解析顺序
    apache中若干模块的安装
    HTML基础
    selenium
    selenium
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7151478.html
Copyright © 2011-2022 走看看