在做图片处理的时候。会遇到调节图片的饱和度的问题,这里就要用到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

iOS有关图片处理的总结 (四)------图片的饱和度,亮度,对照度。的更多相关文章

  1. IOS 截取图片 部分 并生成新图片

    /** * 从图片中按指定的位置大小截取图片的一部分 * * @param image UIImage image 原始的图片 * @param rect CGRect rect 要截取的区域 * * ...

  2. iOS开发UI篇—Quartz2D使用(图片剪切)

    iOS开发UI篇—Quartz2D使用(图片剪切) 一.使用Quartz2D完成图片剪切 1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: - ...

  3. 修正ios h5上传图时的图片方向问题

     .ios上传会在exif中带一个 Orientation的属性,这个属性在windows中不会生效,在ios浏览器中会生效,造成图片在windows资源管理器中与ios浏览器中方向不一致  为了用户 ...

  4. WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放、图片立体轮播、图片倒影立体滚动)效果实现

    原文:WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放.图片立体轮播.图片倒影立体滚动)效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...

  5. iOS - 选取相册中iCloud云上图片和视频的处理

    关于iOS选取相册中iCloud云上图片和视频  推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...

  6. AJ学IOS(55)多线程网络之图片下载框架之SDWebImage

    AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...

  7. 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

    在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...

  8. Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)

    前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果 ...

  9. Base64图片编码原理,base64图片工具介绍,图片在线转换Base64

    Base64图片编码原理,base64图片工具介绍,图片在线转换Base64 DataURI 允许在HTML文档中嵌入小文件,可以使用 img 标签或 CSS 嵌入转换后的 Base64 编码,减少  ...

  10. json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式

     JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...

随机推荐

  1. RPA(Robotic Process Automation)的概要介绍

    最近因为公司业务的需要,开始关注RPA的内容,奈何国内相关的信息太少,只能硬着头皮啃英文了. 下面记录的内容作为学习笔记,有不对的地方请大家指教. 首先RPA(Robotic Process Auto ...

  2. Java GC算法 垃圾收集器

    GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. ...

  3. httpwebrequest 用GET方法时报无法发送具有此谓词类型的内容正文

    如下一段小程序,运行结果报无法发送具有此谓词类型的内容正文的错误,其实原因很简单,因为用的是GET的方式进行提交,而GetRequestStream()是用来在post提交的时候写post的内容的流, ...

  4. C#中split分隔字符串的应用

    .用单个字符来分隔:string str="aaajbbbjccc";string[] sArray=str.Split('j');foreach(string i in sArr ...

  5. NodeJS 常用模块积累

    cluster&forever cluster & forever 虽然 nodejs 原生已经提供了 cluster 模块,大部分情况下可以满足我们的基本需求,但这两个模块 clus ...

  6. 利用 WSL 在 Windows下打造高效的 Linux 开发环境

    WSL-Windows Subsystem for Linux 介绍 The Windows Subsystem for Linux lets developers run Linux environ ...

  7. 抛弃JQ,回归原生js……

    之前我写过一篇文章叫做<jq不会被淘汰>--而事实上它真的不会被淘汰,因为即使在mvvm框架盛行的今天,原生js的api越来越友好的今天,jq依然在用户量上是霸主-- 但是今天我们要讨论的 ...

  8. eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法

    当我们使用eclipse编写Mybatis或hibernate的xml文件时,面对众多标签的配置文件,却没有自动提醒,对于工作和学习都十分不方便. 之所以没有自动提醒,是因为dtd文件没有加载成功. ...

  9. JS中JSON对象的定义和取值

    1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任 ...

  10. 万能动态库调用工具IDMA(InvokeDllMethodsAdvance)

    万能动态库调用工具IDMA 开发者:马兆瑞     QQ/微信:624762543 百度云下载链接:https://pan.baidu.com/s/1skW5W4H CSDN下载链接:http://d ...