Core Image是图像处理中非常重要的框架,如图3-7所示。Core Image用来实时地处理和分析图像,它能处理来自于Core Graphics,Core Video,and Image I/O等框架的数据类型。并使用CPU或GPU进行渲染,Core Image能够屏蔽很多低层次的技术细节,如OpenGL ES和GCD(Grand Central Dispatch)等技术。
图3-7 Core Image框架
Core Image框架中有以下几个非常重要的类。
在Core Image框架中最常用的是CIImage类,有一些构造方法和静态创建方法(即直接通过类名调用静态方法创建)。这些方法如下。
在iOS设备中CIImage图像来源有主要有4种不同渠道。
如果一个icon.png文件放在应用程序包中(资源文件)加载图像,可以通过下面的几种代码实现。
NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"]; NSURL *fileNameAndPath = [NSURL fileURLWithPath:path]; CIImage* image = [CIImage imageWithContentsOfURL: fileNameAndPath];
或
NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"]; NSURL *fileNameAndPath = [NSURL fileURLWithPath:path]; CIImage * image = [[CIImage alloc] initWithContentsOfURL: fileNameAndPath];
或
NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"]; NSData *data = [[NSData alloc] initWithContentsOfFile:path]; CIImage * image = [CIImage imageWithData:data];
或
NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"]; NSData *data = [[NSData alloc] initWithContentsOfFile:path]; CIImage * image = [[CIImage alloc] initWithData:data];
如果icon.png文件放在应用程序沙箱目录中的Document目录下面,可以通过以下几种代码实现。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"]; NSURL *fileNameAndPath = [NSURL fileURLWithPath:path]; CIImage* image = [CIImage imageWithContentsOfURL: fileNameAndPath];
或
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"]; NSURL *fileNameAndPath = [NSURL fileURLWithPath:path]; CIImage * image = [[CIImage alloc] initWithContentsOfURL: fileNameAndPath];
或
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"]; NSData *data = [[NSData alloc] initWithContentsOfFile:path]; CIImage * image = [CIImage imageWithData:data];
或
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"]; NSData *data = [[NSData alloc] initWithContentsOfFile:path]; CIImage * image = [[CIImage alloc] initWithData:data];
在上述代码中获得应用程序沙箱目录中Document目录语句如下:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString* path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"];
如果icon.png文件放在云服务器端http://xxx/icon.png下,可以通过如下的几种方式创建CIImage图像对象。
NSURL *url = [NSURL URLWithString:@"http://xxx/icon.png"]; NSData *data = [[NSData alloc] initWithContentsOfURL:url]; CIImage * image = [CIImage imageWithData:data];
或
NSURL *url = [NSURL URLWithString:@"http://xxx/icon.png"]; NSData *data = [[NSData alloc] initWithContentsOfURL:url]; CIImage * image = [[CIImage alloc] initWithData:data];