手机
当前位置:查字典教程网 >编程开发 >IOS开发 >iOS给图片添加滤镜&使用openGLES动态渲染图片详解及实例
iOS给图片添加滤镜&使用openGLES动态渲染图片详解及实例
摘要:iOS给图片添加滤镜&使用openGLES动态渲染图片给图片增加滤镜有这两种方式:CoreImage/openGLES下面先说明如何使用Co...

iOS给图片添加滤镜&使用openGLES动态渲染图片

给图片增加滤镜有这两种方式: CoreImage / openGLES

下面先说明如何使用CoreImage给图片添加滤镜, 主要为以下步骤:

#1.导入CIImage格式的原始图片

#2.创建CIFilter滤镜

#3.用CIContext将滤镜中的图片渲染出来

#4.导出渲染后的图片

参考代码:

//导入CIImage CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua"]]; //创建出Filter滤镜 CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"]; [filter setValue:ciImage forKey:kCIInputImageKey]; [filter setDefaults]; CIImage *outImage = [filter valueForKey:kCIOutputImageKey]; //用CIContext将滤镜中的图片渲染出来 CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgImage = [context createCGImage:outImage fromRect:[outImage extent]]; //导出图片 UIImage *showImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); UIImageView *imageView = [[UIImageView alloc] initWithImage:showImage]; imageView.center = self.view.center; [self.view addSubview:imageView];

当要设置多个滤镜的时候, 出了新创建一个CIFilter外还要额外设定kCIInputAngleKey, 代码如下:

//导入CIImage CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua.jpeg"]]; //创建出Filter滤镜 CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"]; [filter setValue:ciImage forKey:kCIInputImageKey]; [filter setDefaults]; CIImage *outImage = [filter valueForKey:kCIOutputImageKey]; CIFilter *filterTwo = [CIFilter filterWithName:@"CIHueAdjust"]; [filterTwo setValue:outImage forKey:kCIInputImageKey]; [filterTwo setDefaults]; [filterTwo setValue:@(1.0f) forKey:kCIInputAngleKey]; //如果不增加这行新增的滤镜不会生效 CIImage *outputImage = [filterTwo valueForKey:kCIOutputImageKey]; //用CIContext将滤镜中的图片渲染出来 CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; //导出图片 UIImage *showImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); UIImageView *imageView = [[UIImageView alloc] initWithImage:showImage]; imageView.center = self.view.center; [self.view addSubview:imageView];

下面来介绍怎么用openGLES来使用滤镜渲染图片

使用openGlES的步骤大致如下:

#1.导入要渲染的图片

#2.获取OpenGLES渲染的上下文

#3.创建出渲染的GLKView buffer

#4.创建CoreImage的上下文

#5.进行CoreImage的相关设置

#6.开始渲染并显示图片

参考代码如下:

//导入要渲染的图片 UIImage *showImage = [UIImage imageNamed:@"hua.jpeg"]; CGRect rect = CGRectMake(0, 0, showImage.size.width, showImage.size.height); //获取OpenGLES渲染的上下文 EAGLContext *eagContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; //创建出渲染的buffer GLKView *glkView = [[GLKView alloc] initWithFrame:rect context:eagContext]; [glkView bindDrawable]; [self.view addSubview:glkView]; //创建出CoreImage的上下文 CIContext *ciContext = [CIContext contextWithEAGLContext:eagContext options:@{kCIContextWorkingColorSpace: [NSNull null]}]; //CoreImage相关设置 CIImage *ciImage = [[CIImage alloc] initWithImage:showImage]; CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"]; [filter setValue:ciImage forKey:kCIInputImageKey]; [filter setValue:@(0) forKey:kCIInputIntensityKey]; //开始渲染 [ciContext drawImage:[filter valueForKey:kCIOutputImageKey] inRect:CGRectMake(0, 0, glkView.drawableWidth, glkView.drawableHeight) fromRect:[ciImage extent]]; [glkView display];

如果要动态渲染, 可以通过UISilder动态调整一下代码的vaule值

[filter setValue:vaule forKey:kCIInputIntensityKey];

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

【iOS给图片添加滤镜&使用openGLES动态渲染图片详解及实例】相关文章:

IOS 添加自定义字体方法详解

iOS中使用NSProgress类来创建UI进度条的方法详解

IOS实现碎片化动画详解

iOS开发中使用UIScrollView实现图片轮播和点击加载

iOS在固定的label上动态显示所有文字

iOS10添加本地推送(Local Notification)实例

IOS开发中NSURL的基本操作及用法详解

浅析iOS给图片加水印的方法

IOS给图片添加水印(两种方式)

iOS开发中Quartz2D绘图路径的使用以及条纹效果的实现

精品推荐
分类导航