iOS有关图片处理的总结 (四)------图片的饱和度,亮度,对比度。
来源:互联网 发布:知乎 成人内容 老司机 编辑:程序博客网 时间:2024/05/24 06:08
在做图片处理的时候,会遇到调节图片的饱和度的问题,这里就要用到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有关图片处理 图片的饱和度,亮度,对比度
- iOS 修改图片的亮度、对比度、饱和度
- 改变图片的饱和度、亮度、对比度
- iOS 调节图片亮度,饱和度,对比度
- 调整图片的饱和度,对比度,色彩,亮度,旋转图片
- unity 修改亮度,对比度,饱和度的处理
- iOS中对图片的处理(对图片进行滤镜处理、调整图片饱和度、亮度、对比度、创建一张实时模糊效果 View (毛玻璃效果)、截取一张 view 生成图片)
- 修改图片的色调,饱和度,亮度
- C#图片处理之:亮度和对比度的校正
- C#图片处理之:亮度和对比度的校正
- C#图片处理之:亮度和对比度的校正
- Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
- Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
- 简单的图片处理器(设置色相,亮度,饱和度)
- iOS 滤镜亮度饱和度对比度
- OpenCV自带例子(四)改变一张图片的对比度与亮度
- OpenCV改变图片的对比度和亮度
- 在Mac下配置Yii2----搭建Yii2框架
- linux yum命令详解
- Android自动测试之monkeyrunner工具
- (十二)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【下】
- 正则中需要转义的特殊字符小结
- iOS有关图片处理的总结 (四)------图片的饱和度,亮度,对比度。
- 将多组数据显示在一个控件内
- 挖掘机司机挖断国防光缆致大连军演受阻被判刑
- Eclipse 调试总结
- 遭遇VMIprvse.exe病毒文件把CPU资源耗尽
- awk 两个文件比较出现问题
- MFC嵌入cef3
- 一些个人网站
- Android开发之搜芽项目的图片加载问题(使用Volley进行网络图片加载)