IOS 中的CoreImage框架
IOS 中的CoreImage框架(framework) - time4cnblogs
- coreimage framework 组成
apple 已经帮我们把image的处理分类好,来看看它的结构:
主要分为三部分:
1)定义部分:CoreImage 何CoreImageDefines。见名思义,代表了CoreImage 这个框架和它的定义。
2)操作部分:
滤镜(CIFliter):CIFilter 产生一个CIImage。典型的,接受一到多的图片作为输入,经过一些过滤操作,产生指定输出的图片。
检测(CIDetector):CIDetector 检测处理图片的特性,如使用来检测图片中人脸的眼睛、嘴巴、等等。
特征(CIFeature):CIFeature 代表由 detector处理后产生的特征。
3)图像部分:
画布(CIContext):画布类可被用与处理Quartz 2D 或者 OpenGL。可以用它来关联CoreImage类。如滤镜、颜色等渲染处理。
颜色(CIColor): 图片的关联与画布、图片像素颜色的处理。
向量(CIVector): 图片的坐标向量等几何方法处理。
图片(CIImage): 代表一个图像,可代表关联后输出的图像。

2. 处理步骤:
1)create a ciimage object;
2) create a cifilter object and set input values
3) create a cicontext object.
4) render the filter output image into a cgimage
3.注意
a。关注Ciimage 产生的途径:
1)通过URL和Data
2)通过其他图片类转换,CGImageRef或其他图片。
3)通过CVpixelBufferRef。
4)一组像素Data。
b. 图片颜色,KCCImageColorSpace 来重载默认颜色空间。
c. 图片Metadata。
4. 使用滤镜。
CISepiaTone、CiColorControls、CIHueBlendMode。

处理过程:多个CImage输入 -- 》 CIHeBlendMode --》 CiSepiatone。

渲染输出:

流程: 获取context -》 转成CIimage -》 渲染成CGImageRef -》 转换为UIimage -》 释放 CGImageRef -》 使用UIImage。
5.脸部检测
自动增强: CIRedEyeCorrection 、CIFaceBalance(调整图片来给出更好的皮肤色调)、CIVibrance(在不扭曲皮肤色调的情况下,增加饱和度)、CIToneCurve(调整图片对比)、高亮阴影调整。
- (UIImage*)saturateImage:(float)saturationAmount withContrast:(float)contrastAmount{
UIImage *sourceImage = self;
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter= [CIFilter filterWithName:@"CIColorControls"];
CIImage *inputImage = [[CIImage alloc] initWithImage:sourceImage];
[filter setValue:inputImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat:saturationAmount] forKey:@"inputSaturation"];
[filter setValue:[NSNumber numberWithFloat:contrastAmount] forKey:@"inputContrast"];
return [UIImage imageWithCGImage:[context createCGImage:filter.outputImage fromRect:filter.outputImage.extent]];
}
- (UIImage*)vignetteWithRadius:(float)inputRadius andIntensity:(float)inputIntensity{
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter= [CIFilter filterWithName:@"CIVignette"];
CIImage *inputImage = [[CIImage alloc] initWithImage:self];
[filter setValue:inputImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat:inputIntensity] forKey:@"inputIntensity"];
[filter setValue:[NSNumber numberWithFloat:inputRadius] forKey:@"inputRadius"];
return [UIImage imageWithCGImage:[context createCGImage:[filter outputImage] fromRect:filter.outputImage.extent]];
}
-(UIImage*)worn{
CIImage *beginImage = [[CIImage alloc] initWithImage:self];
CIFilter *filter = [CIFilter filterWithName:@"CIWhitePointAdjust"
keysAndValues: kCIInputImageKey, beginImage,
@"inputColor",[CIColor colorWithRed: green: blue: alpha:],
nil];
CIImage *outputImage = [filter outputImage];
CIFilter *filterB = [CIFilter filterWithName:@"CIColorControls"
keysAndValues: kCIInputImageKey, outputImage,
@"inputSaturation", [NSNumber numberWithFloat:.],
@"inputContrast", [NSNumber numberWithFloat:0.8],
nil];
CIImage *outputImageB = [filterB outputImage];
CIFilter *filterC = [CIFilter filterWithName:@"CITemperatureAndTint"
keysAndValues: kCIInputImageKey, outputImageB,
@"inputNeutral",[CIVector vectorWithX: Y: Z:],
@"inputTargetNeutral",[CIVector vectorWithX: Y: Z:],
nil];
CIImage *outputImageC = [filterC outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
return [UIImage imageWithCGImage:[context createCGImage:outputImageC fromRect:outputImageC.extent] scale:1.0 orientation:self.imageOrientation];
}
-(UIImage* )blendMode:(NSString *)blendMode withImageNamed:(NSString *) imageName{
/*
Blend Modes
CISoftLightBlendMode
CIMultiplyBlendMode
CISaturationBlendMode
CIScreenBlendMode
CIMultiplyCompositing
CIHardLightBlendMode
*/
CIImage *inputImage = [[CIImage alloc] initWithImage:self];
//try with different textures
CIImage *bgCIImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:imageName]];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter= [CIFilter filterWithName:blendMode];
// inputBackgroundImage most be the same size as the inputImage
[filter setValue:inputImage forKey:@"inputBackgroundImage"];
[filter setValue:bgCIImage forKey:@"inputImage"];
return [UIImage imageWithCGImage:[context createCGImage:[filter outputImage] fromRect:filter.outputImage.extent]];
}
- (UIImage *)curveFilter
{
CIImage *inputImage =[[CIImage alloc] initWithImage:self];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIToneCurve"];
[filter setDefaults];
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:[CIVector vectorWithX:0.0 Y:0.0] forKey:@"inputPoint0"]; // default
[filter setValue:[CIVector vectorWithX:0.25 Y:0.15] forKey:@"inputPoint1"];
[filter setValue:[CIVector vectorWithX:0.5 Y:0.5] forKey:@"inputPoint2"];
[filter setValue:[CIVector vectorWithX:0.75 Y:0.85] forKey:@"inputPoint3"];
[filter setValue:[CIVector vectorWithX:1.0 Y:1.0] forKey:@"inputPoint4"]; // default
return [UIImage imageWithCGImage:[context createCGImage:[filter outputImage] fromRect:filter.outputImage.extent]];
}
IOS 中的CoreImage框架的更多相关文章
- IOS 中的CoreImage框架(framework)
http://www.cnblogs.com/try2do-neo/p/3601546.html coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它 ...
- iOS中的主要框架framework
在日常的iOS项目开发中,主要使用的就是Foundation和UIKit这两个框架. (一)Foundation框架 Foundation是对Core Foundation框架的一个封装,使用Foun ...
- iOS引入JavaScriptCore引擎框架(二)
为何放弃第一种方案 UIWebView的JSContext获取 上篇中,我们通过简单的kvc获取UIWebVIew的JSContext,但是实际上,apple并未给开发者提供访问UIWebVi ...
- iOS 开发之照片框架详解(1)
http://kayosite.com/ios-development-and-detail-of-photo-framework.html/comment-page-1 一. 概要 在 iOS 设备 ...
- iOS 开发之照片框架详解
转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...
- iOS中集成ijkplayer视频直播框架
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- ios中框架介绍
ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...
- ios中创建自己的框架
如果你是IOS的新手,并有.net开发的背景(就像我一样),你可能到处去找,哪里有dll呢? 其实,IOS平台是使用框架而不是dll,框架里面包含公共头文件和二进制文件.很不幸,XCode并不支持你自 ...
- 学习Swift中的CoreImage(图形核心编程)
Core Image是一个可以让你轻松使用图形过虑器的强力框架.在这里你几乎可以获得所有不同种类的效果,比如修改图像饱和度,色彩范围,亮度等.它甚至也可以利用CPU或者GPU来处理图像数据并且它的速度 ...
随机推荐
- 原生JS、CSS实现的转盘效果(目前仅支持webkit)
这是一个原生JS.CSS实现的转盘效果(题目在这:http://www.cnblogs.com/arfeizhang/p/turntable.html),花了半个小时左右,准备睡觉,所以先贴一段代码, ...
- Android新组件RecyclerView介绍,其效率更好
今天我们首先来说为什么要介绍这个新组件RecyclerView,因为前几天我发布了一个常用面试题ListView的复用及如何优化的文章,介绍给一些开发者,但是我看到有关的反馈说:现在都不再用listv ...
- bluebird
nodejs-使用request和bluebird编写的http请求模块 http://blog.csdn.net/o6875461/article/details/44594545
- WPF中RadioButton的分组
当界面上出现多组Radiobutton时,将所有的Radiobutton写在同一个Grid里面,导致系统认为所有的Radiobutton是同一组,造成选择混乱,解决的方法: 1.要为属于同个组的Rad ...
- 报课系统APP
031302307黄丰润 031302343张晓燕 #NABCD模型分析 合理分析需求有助于说服客户,所以我们有如下分析 N(need)--客户需要什么 负责人需要将选课信息和选课表格一起发送给所负责 ...
- 快速安装 GitLab 并汉化
转载:http://www.jianshu.com/p/7a0d6917e009
- StyleCop的常见错误
所有规则的翻译(基于版本4.7.44.0): 文档规则 1.SA1600:ElementsMustBeDocumented元素必须添加注释 2.SA1601: PartialElementsMustB ...
- jQuery技术交流资料
jQuery技术交流资料https://www.zybuluo.com/jikeytang/note/65371
- 【FE前端学习】第二阶段任务-基础
技能学习部分: 1.需要熟练掌握HTML标签以及CSS各个常用属性. 2.掌握CSS3 常用属性 3.掌握jquery的基本用法,对于JS基本逻辑语句需要熟练掌握 上文 [FE前端学习]第二阶段任务- ...
- ElasticSearch插件安装Head、Kopf与Bigdesk
ElasticSearch-Head ElasticSearch-Head 是一个与Elastic集群(Cluster)相交互的Web前台. ES-Head的主要作用 它展现ES集群的拓扑结构,并且可 ...