CoreImage 处理图片

1.CoreImage 滤镜的使用(马赛克模糊)

CoreImage是苹果公司为了简化图片处理的难度而开发出来的类库。

随着iOS版本升级以及硬件性能的不断提升,CoreImage将支持越来越多的滤镜

- (void)hFilter {

// 0.
导入CIImage图片

CIImage *ciImage = [[CIImage
alloc] initWithImage:[UIImage
imageNamed:@"demo"]];

// 1.
创建出Filter滤镜

CIFilter *filter = [CIFilter
filterWithName:@"CIPixellate"];

[filter
setValue:ciImage

forKey:kCIInputImageKey];

NSLog(@"%@", filter.attributes);

[filter
setDefaults];

CIImage *outImage = [filter
valueForKey:kCIOutputImageKey];

// 2.
用CIContext将滤镜中的图片渲染出来

CIContext *context = [CIContext
contextWithOptions:nil];

CGImageRef cgImage = [context
createCGImage:outImage

fromRect:[outImage
extent]];

// 3.
导出图片

UIImage *showImage = [UIImage
imageWithCGImage:cgImage];

CGImageRelease(cgImage);

// 4.
加载出来

UIImageView *imageView = [[UIImageView
alloc] initWithImage:showImage];

imageView.center       =
self.view.center;

[self.view
addSubview:imageView];

}

2.CoreImage
滤镜的组合

不同的滤镜可以组合在一起使用。

可以动态的修改滤镜组合中单个滤镜的参数来实现一种动态调整的效果

- (void)complexCoreImage {

// 0.
导入CIImage图片

CIImage *ciImage = [[CIImage
alloc] initWithImage:[UIImage
imageNamed:@"demo"]];

// 1.
创建出Filter滤镜

CIFilter *filterOne = [CIFilter
filterWithName:@"CIPixellate"];

[filterOne
setValue:ciImage

forKey:kCIInputImageKey];

[filterOne
setDefaults];

CIImage *outImage = [filterOne
valueForKey:kCIOutputImageKey];

CIFilter *filterTwo = [CIFilter
filterWithName:@"CIHueAdjust"];

[filterTwo
setValue:outImage

forKey:kCIInputImageKey];

[filterTwo
setDefaults];

//默认为0,不设置不能改变,可以封装一个调用

[filterTwo
setValue:@(3.14)

forKey:kCIInputAngleKey];

NSLog(@"%@",filterTwo.attributes);//可以看到一些参数 key

CIImage *outputImage = [filterTwo
valueForKey:kCIOutputImageKey];

// 2.
用CIContext将滤镜中的图片渲染出来

CIContext *context = [CIContext
contextWithOptions:nil];

CGImageRef cgImage = [context
createCGImage:outputImage

fromRect:[outImage
extent]];

// 3.
导出图片

UIImage *showImage = [UIImage
imageWithCGImage:cgImage];

CGImageRelease(cgImage);

// 4.
加载出来

UIImageView *imageView = [[UIImageView
alloc] initWithImage:showImage];

imageView.center       =
self.view.center;

[self.view
addSubview:imageView];

}

3.在 OpenGLES 下进行渲染

在OpenGLES下进行滤镜的渲染可以提高效率。(GPU渲染,不占用CPU)

如果需要实时查看多个滤镜动态渲染的效果,使用OpenGLES是一个好的选择

#import <GLKit/GLKit.h>

@interface
ViewController ()

@property (nonatomic,
strong) GLKView   *glkView;
// 渲染用的buffer视图

@property (nonatomic,
strong) CIFilter  *filter;

@property (nonatomic,
strong) CIImage   *ciImage;

@property (nonatomic,
strong) CIContext *ciContext;

@end

@implementation ViewController

- (void)viewDidLoad {

[super
viewDidLoad];

UIImage *showImage = [UIImage
imageNamed:@"demo"];

CGRect  rect       =
CGRectMake(0,
0, showImage.size.width, showImage.size.height);

//
获取OpenGLES渲染的上下文

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

//
创建出渲染的buffer

_glkView = [[GLKView
alloc] initWithFrame:rect

context:eagContext];

[_glkView
bindDrawable];

[self.view
addSubview:_glkView];

//
创建出CoreImage用的上下文

_ciContext = [CIContext
contextWithEAGLContext:eagContext

options:@{kCIContextWorkingColorSpace : [NSNull
null]}];

// CoreImage相关设置

_ciImage = [[CIImage
alloc] initWithImage:showImage];

_filter = [CIFilter
filterWithName:@"CISepiaTone"];

[_filter
setValue:_ciImage
forKey:kCIInputImageKey];

[_filter
setValue:@(0)
forKey:kCIInputIntensityKey];

//
开始渲染

[_ciContext
drawImage:[_filter
outputImage]

inRect:CGRectMake(0,
0, _glkView.drawableWidth,
_glkView.drawableHeight)

fromRect:[_ciImage
extent]];

[_glkView
display];

//
动态渲染

UISlider *slider    = [[UISlider
alloc] initWithFrame:CGRectMake(0,
400, 320,
20)];

slider.minimumValue =
0.f;

slider.maximumValue =
1.f;

[slider addTarget:self
action:@selector(sliderEvent:)
forControlEvents:UIControlEventValueChanged];

[self.view
addSubview:slider];

}

- (void)sliderEvent:(UISlider *)slider {

[_filter
setValue:_ciImage
forKey:kCIInputImageKey];

[_filter
setValue:@(slider.value)

forKey:kCIInputIntensityKey];

//
开始渲染

[_ciContext
drawImage:[_filter
outputImage]

inRect:CGRectMake(0,
0, _glkView.drawableWidth,
_glkView.drawableHeight)

fromRect:[_ciImage
extent]];

[_glkView
display];

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-16 16:35:37

CoreImage 处理图片的相关文章

极客学院录制课程合集

iOS 中 CALayer 的使用 iOS 中 CAShapeLayer 的使用 iOS 中 CAGradientLayer 的使用 用缓动函数模拟物理动画 使用 Facebook 开源动画库 POP 实现真实衰减与弹簧动画 GCD 编程 设计复杂的 iOS 动画效果 iOS 模糊效果的使用 使用 maskView 设计动画 使用带粒子效果的 CAEmitterLayer 使用 CoreImage 处理图片

CoreImage 可以用滤镜来处理图片,比如修改饱和度,亮度,对比度等

// //  ViewController.m //  UI-CoreImage // //  Created by Bruce on 15/5/22. //  Copyright (c) 2015年 Bruce. All rights reserved. // /*  CoreImage 可以用滤镜来处理图片,比如修改饱和度,亮度,对比度等  它利用GPU(或者CPU,取决于客户)来非常快速.甚至实时地处理图像数据和视频的帧.多个Core Image滤镜可以叠加在一起,从而可以一次性地产生多重

IOS 中的CoreImage框架(framework)

http://www.cnblogs.com/try2do-neo/p/3601546.html coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它的结构: 主要分为三部分: 1)定义部分:CoreImage 何CoreImageDefines.见名思义,代表了CoreImage 这个框架和它的定义. 2)操作部分: 滤镜(CIFliter):CIFilter 产生一个CIImage.典型的,接受一到多的图片作为输入,经过一些过滤操作,产生指定

CoreImage 及滤镜效果

参考网址:http://blog.sina.com.cn/s/blog_92ac2c5b0101cm5b.html 感谢 出其东门 做过 iOS 开发的人,对core这个字眼一定不陌生,它总是代表着或者底层的,或者牛叉的,或者底层牛叉的Apple 自己的框架. CoreImage 让你可以简单的应用滤镜来处理图片,比如修改饱和度,亮度,对比度等东西(对了解 PS 的人来说,非常的亲切吧). 它利用GPU(或者CPU,取决于客户)来非常快速.甚至实时地处理图像数据和视频的帧.多个Core Imag

IOS 中的CoreImage框架

IOS 中的CoreImage框架(framework) - time4cnblogs 时间 2014-03-15 00:24:00  博客园-所有随笔区原文  http://www.cnblogs.com/try2do-neo/p/3601546.html coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它的结构: 主要分为三部分: 1)定义部分:CoreImage 何CoreImageDefines.见名思义,代表了CoreImage 这个

Eclipse中处理图片引包问题

在Eclipse中处理图片,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;报错情况下解决方案: Eclipse默认把这些受访问限制的API设成了ERROR.只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated and restricted API中的Forbidden

Python 将pdf转换成txt(不处理图片)

上一篇文章中已经介绍了简单的python爬网页下载文档,但下载后的文档多为doc或pdf,对于数据处理仍然有很多限制,所以将doc/pdf转换成txt显得尤为重要.查找了很多资料,在linux下要将doc转换成txt确实有难度,所以考虑先将pdf转换成txt. 师兄推荐使用PDFMiner来处理,尝试了一番,确实效果不错,在此和大家分享. PDFMiner 的简介:PDFMiner is a tool for extracting information from PDF documents.

CoreImage的使用及常见滤镜工具(一)

概述: CoreImage是一个图像框架,它基于OpenGL顶层创建,底层则用着色器来处理图像,这意味着它利用了GPU基于硬件加速来处理图像.CoreImage中有很多滤镜,它们能够一次给予一张图像或者视频帧多种视觉效果.而且滤镜可以连接起来组成一个滤镜链,把滤镜效果叠加起来处理图像. CoreImage框架最早出现于iOS5,iOS6也对这个框架进行了扩展,这篇博客的Demo是基于iOS7的. CoreImage框架最常用的类: * CIImage 保存图像数据的类,可以通过UIImage,图

CoreImage 中的模糊滤镜

1.CoreImage 中的模糊滤镜 1.1CoreImage是苹果用来简化图片处理的框架 1.2CIImage.CIFilter与CIContext三者联系 1.3CIGaussianBlur中可能设置的参数 2.UIImage+imageEffects的category模糊效果 3.iOS8中的UIVisualEffectView模糊效果的用法 一..CoreImage 中的模糊滤镜 - (void)coreImageBlur { //原始图片 UIImage *image