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来处理图像数据并且它的速度 ...
随机推荐
- .net 开发人员如何自处
关于N家还是J家,谁家更阔绰有前途的问题,每年都要讨论一会,当然和各位兄弟在岗位上迷茫,不知位置在哪有关系,不过这个问题基本算是伪问题,这种东西放到更高的维度,真的什么都不是. 但是为什么J家好像是不 ...
- [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)
题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...
- UIToolbar 如何调整里面的按钮位置
可以在Bar Button Item后面填个Fixed Space Bar Button Item 或者Flexible Space Bar Button Item,然后再在后面加上下一个Bar Bu ...
- 2016 版 Laravel 系列入门教程(五)【最适合中国人的 Laravel 教程】
本教程示例代码见: https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的办法就是去看示例代码. 本文是本系列教程的完结篇,我们将一起给 Arti ...
- 每天一个linux命令(53):wget命令
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- u1-nav-js
'use strict';define([ 'jquery'], function($) { var nav = { init : function() { $("#burger-menu& ...
- RAID 磁盘状态为foreign,怎么变成ready
我们在关掉电源,插入三块硬盘,打开电源 这时候: 首先启动服务器,出现[Press<ctrl><R>to Run Configuration Utility]提示时,按下ctr ...
- sphinx在c#.net平台下使用(一)
Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个可以结合MySQL,PostgreSQL全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.是做站内全文搜 ...
- BIEE 后台新建分析没有你创建的数据源
(1)登录http://win-5rnnibkasrt:9704/analytics/saw.dll?bieehome 点击“管理” 找到“发出SQL语句”在里面写call sapurgeallca ...
- Java编程思想学习(十二) 数组和容器
一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...