IOS 中的CoreImage框架(framework) - time4cnblogs

  1. 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框架的更多相关文章

  1. IOS 中的CoreImage框架(framework)

    http://www.cnblogs.com/try2do-neo/p/3601546.html coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它 ...

  2. iOS中的主要框架framework

    在日常的iOS项目开发中,主要使用的就是Foundation和UIKit这两个框架. (一)Foundation框架 Foundation是对Core Foundation框架的一个封装,使用Foun ...

  3. iOS引入JavaScriptCore引擎框架(二)

    为何放弃第一种方案 UIWebView的JSContext获取     上篇中,我们通过简单的kvc获取UIWebVIew的JSContext,但是实际上,apple并未给开发者提供访问UIWebVi ...

  4. iOS 开发之照片框架详解(1)

    http://kayosite.com/ios-development-and-detail-of-photo-framework.html/comment-page-1 一. 概要 在 iOS 设备 ...

  5. iOS 开发之照片框架详解

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...

  6. iOS中集成ijkplayer视频直播框架

    ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...

  7. ios中框架介绍

    ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...

  8. ios中创建自己的框架

    如果你是IOS的新手,并有.net开发的背景(就像我一样),你可能到处去找,哪里有dll呢? 其实,IOS平台是使用框架而不是dll,框架里面包含公共头文件和二进制文件.很不幸,XCode并不支持你自 ...

  9. 学习Swift中的CoreImage(图形核心编程)

    Core Image是一个可以让你轻松使用图形过虑器的强力框架.在这里你几乎可以获得所有不同种类的效果,比如修改图像饱和度,色彩范围,亮度等.它甚至也可以利用CPU或者GPU来处理图像数据并且它的速度 ...

随机推荐

  1. Bootstrap系列 -- 23. 图片

    图像在网页制作中也是常要用到的元素,在Bootstrap框架中对于图像的样式风格提供以下几种风格: 1.img-responsive:响应式图片,主要针对于响应式设计 2.img-rounded:圆角 ...

  2. [BZOJ1951][SDOI2005]古代猪文(数论好题)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1951 分析: 练习数论知识的好题,涉及到费马小定理.lucas定理.求逆元

  3. c#批量插入示例

    var sql = @"Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcApplication1-20131029153010;I ...

  4. jQuery Mobile学习日记(二)

    首先依HTML5方式加载,DOCTYPE表示格式为HTML5:主要适用于iPhone.Android等,viewport表示适用于移动终端的适中显示,initial-scale缩放比例在1.0~1.3 ...

  5. javaee添加验证码

    package com.zh.code; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import j ...

  6. iOS不得姐项目--appearance的妙用,再一次设置导航栏返回按钮,导航栏左右按钮的封装(巧用分类)

    一.UI_APPEARANCE_SELECTOR 彩票项目中appearance的用法一直没有搞明白,这次通过第二个项目中老师的讲解,更深一层次的了解到了很多关于appearance的作用以及使用方法 ...

  7. .net架构设计读书笔记--第三章 第10节 命令职责分离(CQRS)简介(Introducing CQRS)

    一.分离查询命令 Separating commands from queries     早期的面向DDD设计方法的难点是如何设计一个类,这个类要包含域的方方面面.通常来说,任务软件系统方法调用可以 ...

  8. Spring对Hibernate的session生效期(事物提交管理)介绍

    在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,这样做的原因是因为Hibernate默认的事务自动提交是false,它是需要人为的手动 ...

  9. 获取和设置tinyMCE 4编辑器的内容

    对于tinymce编辑器是无法通过js进行内容的读写的,必须使用编辑器自身的方法才行,下面是一些方法,希望能对用到的朋友有所帮助: 1.如果当前页面只有一个编辑器: 获取内容:tinyMCE.acti ...

  10. Angulajs系列-01-入门

    1.解决什么问题? a, controller的各种的创建 b,体验angular的双向绑定 2.怎么解决 2.1 引入angularjs 下载地址 2.2 创建controller的方法 2.2.1 ...