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
iOS有关图片处理的总结 (四)------图片的饱和度,亮度,对照度。的更多相关文章
- IOS 截取图片 部分 并生成新图片
/** * 从图片中按指定的位置大小截取图片的一部分 * * @param image UIImage image 原始的图片 * @param rect CGRect rect 要截取的区域 * * ...
- iOS开发UI篇—Quartz2D使用(图片剪切)
iOS开发UI篇—Quartz2D使用(图片剪切) 一.使用Quartz2D完成图片剪切 1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: - ...
- 修正ios h5上传图时的图片方向问题
.ios上传会在exif中带一个 Orientation的属性,这个属性在windows中不会生效,在ios浏览器中会生效,造成图片在windows资源管理器中与ios浏览器中方向不一致 为了用户 ...
- WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放、图片立体轮播、图片倒影立体滚动)效果实现
原文:WPF技术触屏上的应用系列(四): 3D效果图片播放器(图片立体轮放.图片立体轮播.图片倒影立体滚动)效果实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7 ...
- iOS - 选取相册中iCloud云上图片和视频的处理
关于iOS选取相册中iCloud云上图片和视频 推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...
- AJ学IOS(55)多线程网络之图片下载框架之SDWebImage
AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...
- 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)
在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...
- Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)
前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果 ...
- Base64图片编码原理,base64图片工具介绍,图片在线转换Base64
Base64图片编码原理,base64图片工具介绍,图片在线转换Base64 DataURI 允许在HTML文档中嵌入小文件,可以使用 img 标签或 CSS 嵌入转换后的 Base64 编码,减少 ...
- json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式
JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...
随机推荐
- 【基础】Attribute的妙用
一.何为Attribute 下面是微软官方对Attribute的解释: 公共语言运行时允许你添加类似关键字的描述声明,叫做Attributes,它对程序中的元素进行标注,如类型.字段.方法和属性等.A ...
- javaScript额外笔记
--------------------------------------------------------Part 1javascript:脚本语言辅助开发:网页的前台开发三大块:1.HTML ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- 让ffmpeg支持10bit编码
文章版权由作者柯O德尔和博客园共有,请尊重并支持原创,若转载请于明显处标明出处:http://www.cnblogs.com/koder/ 最近因为工作需要,要进行265 10bit编码,于是从ffm ...
- [转载] Redis实现分布式锁
转载自http://zhidao.baidu.com/link?url=m56mmWYwRgCymsaLZ2tx-GWDy5FYmUWGovEtuApjTpktHS3bhofrCS-QVGiLoWeS ...
- Spring MVC工作原理
1. 客户端请求提交到DispatcherServlet2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller3. Dispat ...
- python基础-------函数(一)
一 为何要有函数?不加区分地将所有功能的代码垒到一起, 问题是: 代码可读性差 代码冗余 代码可扩展差 如何解决?函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用 结论:函数使用必须 ...
- SDN/NFV趋势思考点滴
一.为什么控制器.网管OSS融合? 1.云化是趋势:传统网络架构管理规模达到瓶颈:微服务架构通过扩充多实例解决管理规模问题.2.NFV是趋势:设备运营商传统网元在云化,以软件形式提供VNF:3.运维体 ...
- OpenTSDB介绍
OpenTSDB 2.0, the scalable, distributed time series database可扩展.分布式时间序列数据库 1.背景 一些老的监控系统,它常常会出现这样的问题 ...
- Hi,腾讯WeTest联合Unity官方打造的性能分析工具UPA,今日全新发布!
早在2016年ChinaJoy开始,WeTest曾受邀出席过Unity中国的线下性能场的活动,介绍我们的自动化框架和王者荣耀的故事.当时的活动很成功,期间我们收到了不少Unity开发者的好评,也为我们 ...