IOS图像处理(9)使用CoreImage滤镜

CoreImage是IOS5中新增框架,通过这个框架我们可以轻松地对图片进行各种特效处理

使用CoreImage的主要流程如下(需要添加CoreImage框架至项目中):

1 创建CIContext,IOS系统提供了3种方法创建CIContext

a.基于CPU

CIContext *context = [CIContext contextWithOption:@{kCIContextUseSoftwareRenderer:@YES}];

b.基于GPU

CIContext *context = [CIContext contextWithOption:nil];

最常用也是性能较好地一种方式,缺点是基于GPU的CIContext无法跨应用访问,比如打开UIImagePickerController选取图片,如果直接在委托方法中使用CIContext,将会自动降为基于CPU,所以可以在委托方法中保存图片,回到主类中调用CIContext进行处理

c.基于OpenGL优化,可获得实时性能

EAGLContext *eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

CIContext *context = [CIContext contextWithEAGLContext:eaglContext];

2 创建CIFilter过滤器

3 创建CIImage图片作为源图片,可以使用NSURL,UIImage以及NSData创建

4 将CIImage设置为CIFilter的inputImage,同时根据不同的过滤器设置不同的参数

5 通过CIFilter获取进过过滤器转换后的图片,图片格式为CIImage,通过CIContext可以得到CGImage

以下例子展示了像素画的过滤器

- (void)viewDidLoad
{
    [super viewDidLoad];

    //可以打印出所有的过滤器以及支持的属性
    NSArray *filters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
    for (NSString *filterName in filters) {
        CIFilter *filter = [CIFilter filterWithName:filterName];
        NSLog(@"%@,%@",filterName,[filter attributes]);
    }

    //创建基于GPU的CIContext
    CIContext *context = [CIContext contextWithOptions:nil];

    //创建过滤器
    CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"];

    //创建CIImage
    CIImage *sourceImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"]]];

    //将CIImage设为源图片
    [filter setValue:sourceImage forKey:@"inputImage"];

    //设置过滤参数(像素大小)
    [filter setValue:@15 forKey:@"inputScale"];

    //得到输出图片
    CIImage *outputImage = [filter outputImage];

    CGImageRef cgImage= [context createCGImage:outputImage fromRect:[UIScreen mainScreen].bounds];
    UIImage *image = [UIImage imageWithCGImage:cgImage];

    //调用了create创建,需要release
    CGImageRelease(cgImage);

    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];

} 

时间: 2024-11-29 03:19:35

IOS图像处理(9)使用CoreImage滤镜的相关文章

详解OS X和iOS图像处理框架Core Image

转自:http://www.csdn.net/article/2015-02-13/2823961-core-image 摘要:本 文结合实例详解了OS X和iOS图像处理框架Core Image的使用,如何通过Core Image来创建和使用iOS的内置滤镜,非常适合初学者学习.虽然示例代码是用Swift写的iOS程序,不过实现概念很容易转换到 Objective-C和OS X. 这篇文章会为初学者介绍一下Core Image,一个OS X和iOS的图像处理框架. 如果你想跟着本文中的代码学习

iOS 图像处理-剪裁图像

解决问题:按照某一长宽比例,剪裁图片的上部和下部,保留中间的内容.当然也可以自定义需要剪裁留下的区域 前提:需要添加Framework:CoreGraphics.framework 代码: - (UIImage*) crop:(UIImage*)theImage{ // Get size of current image CGSize size = [theImage size]; // Create rectangle that represents a cropped image CGFlo

iOS 图像处理 - 图像拼接

解决问题:将两个图像拼接在一起 前提:需要添加Framework:CoreGraphics.framework 源码: - (UIImage *) combine:(UIImage*)leftImage :(UIImage*)rightImage { CGFloat width = leftImage.size.width * 2; CGFloat height = leftImage.size.height; CGSize offScreenSize = CGSizeMake(width, h

iOS 图像处理 - 模糊图像

解决问题:将图像模糊 前提:添加 CoreGraphics.framework 源码: - (UIImage*) blur:(UIImage*)theImage { // create our blurred image CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage]; // setting up G

Atitit Atitit 图像处理之  Oilpaint油画滤镜 水彩画 源码实现

Atitit Atitit 图像处理之 Oilpaint油画滤镜 水彩画 源码实现 1.1. 具体原理参考1 2. 水彩画滤镜算法如下:1 2.1. 这个其实就是灰度层次降低维度的过程.2 2.2. 模板半径Radius用来调节水彩画的水彩程度.即是颜色的降低维度的过程2 1.1. 具体原理参考 Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 2. 水彩画滤镜算法如下: 灰度,离散化(聚类).. 灰度层次N就是水彩画最多使用的颜色明暗层次,一般7种一下为好

iOS图像处理(一)UIImage创建图像

原文链接: iOS图像处理(一)UIImage创建图像 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

iOS图像处理(二)Core Image介绍

原文链接: iOS图像处理(二)Core Image介绍 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

iOS开发系列--绘图与滤镜全面解析

概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图形绘图框架进行介绍:Quartz 2D绘制2D图形和Core Image中强大的滤镜功能. Quartz 2D 基本图形绘制 视图刷新 其他图形上下文 Core Image Quartz 2D 在iOS中常用的绘图框架就是Quartz 2D,Quartz 2D是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.Quartz 2D在UI

社交类App开发中的IOS图像处理

社交类app是目前市面上比较火的app开发之一,如果想要开发一款类似于instagram或者微博的app,可能你虽然懂一些基础的UIKit.网络连接.服务器端等,但是对于社交类app来说,图片和图片滤镜是非常非常重要的一部分,如果想要从速成和知识体系两方面来准备开发社交类app的话,大概就需要下面几条建议: 速成类: 1. 其实目前网络上有非常多较为成熟完善的图片类库,正常来说可以通过短时间的学习迅速掌握并可以直接应用到你的开发.如果需要列举,大概就是下面这两种: l 苹果:Core Image