使用CoreImage教程

CoreImage包含有很多实用的滤镜,专业处理图片的库,为了能看到各种渲染效果,请使用如下图片素材.

现在可以开始教程了:

#define FIX_IMAGE(image)  fixImageWidth(image, 320.f)

// 固定图片的宽度
UIImage * fixImageWidth(UIImage *image, CGFloat width)
{
float newHeight = image.size.height * (width / image.size.width);
CGSize size = CGSizeMake(width, newHeight);
UIGraphicsBeginImageContextWithOptions(size, NO, ); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0); CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height),
image.CGImage); UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); return imageOut;
}

代码片段

    // 将UIImage转换成CIImage
CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"1.jpg"]]; // 创建滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectMono"
keysAndValues:kCIInputImageKey, ciImage, nil];
[filter setDefaults]; // 获取绘制上下文
CIContext *context = [CIContext contextWithOptions:nil]; // 渲染并输出CIImage
CIImage *outputImage = [filter outputImage]; // 创建CGImage句柄
CGImageRef cgImage = [context createCGImage:outputImage
fromRect:[outputImage extent]]; // 获取图片
UIImage *showImage = [UIImage imageWithCGImage:cgImage]; // 释放CGImage句柄
CGImageRelease(cgImage); // 显示图片
UIImageView *imageView = \
[[UIImageView alloc] initWithImage:FIX_IMAGE(showImage)];
[self.view addSubview:imageView];

代码片段

效果如下:

我们对操作进行简易的封装:

CIFilterEffect.h + CIFilterEffect.m

//
// CIFilterEffect.h
// CIFilter
//
// Created by YouXianMing on 14-5-9.
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import <Foundation/Foundation.h> @interface CIFilterEffect : NSObject @property (nonatomic, strong, readonly) UIImage *result; - (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name; @end
//
// CIFilterEffect.m
// CIFilter
//
// Created by YouXianMing on 14-5-9.
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "CIFilterEffect.h" @interface CIFilterEffect () @property (nonatomic, strong, readwrite) UIImage *result; @end @implementation CIFilterEffect - (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name
{
self = [super init];
if (self)
{
// 将UIImage转换成CIImage
CIImage *ciImage = [[CIImage alloc] initWithImage:image]; // 创建滤镜
CIFilter *filter = [CIFilter filterWithName:name
keysAndValues:kCIInputImageKey, ciImage, nil];
[filter setDefaults]; // 获取绘制上下文
CIContext *context = [CIContext contextWithOptions:nil]; // 渲染并输出CIImage
CIImage *outputImage = [filter outputImage]; // 创建CGImage句柄
CGImageRef cgImage = [context createCGImage:outputImage
fromRect:[outputImage extent]]; _result = [UIImage imageWithCGImage:cgImage]; // 释放CGImage句柄
CGImageRelease(cgImage);
}
return self;
} @end

我们来开始尝试其他的滤镜效果,我们可以尝试的至少有这些:

@"CILinearToSRGBToneCurve",
@"CIPhotoEffectChrome",
@"CIPhotoEffectFade",
@"CIPhotoEffectInstant",
@"CIPhotoEffectMono",
@"CIPhotoEffectNoir",
@"CIPhotoEffectProcess",
@"CIPhotoEffectTonal",
@"CIPhotoEffectTransfer",
@"CISRGBToneCurveToLinear",
@"CIVignetteEffect",

下面是所有渲染出来的图片,与上面提供的滤镜名字一一对应:

以下效果是需要进行一些配置才能达到的效果,这个就不开源了,你懂得:).

福利:

Core Image Filter Reference

https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

CICategoryBlur

CICategoryColorAdjustment

CICategoryColorEffect(我们刚刚用到的一些效果在这里哦)

CICategoryCompositeOperation

CICategoryDistortionEffect

CICategoryGenerator

CICategoryGeometryAdjustment

CICategoryGradient

CICategoryHalftoneEffect

CICategoryReduction

CICategorySharpen

CICategoryStylize

CICategoryTileEffect

CICategoryTransition

最新文章

  1. 从零自学Hadoop(22):HBase协处理器
  2. [LeetCode] Convex Polygon 凸多边形
  3. MySQL主从复制实现
  4. adaboost原理与实践
  5. Consuming a RESTful Web Service
  6. CodeMirror很好用
  7. canvas滤镜之简单的取反
  8. drupal module 自定义
  9. 黑马程序员——JAVA基础之函数,重载,内存结构
  10. Codeforces 118 D. Caesar&#39;s Legions (dp)
  11. Linux下ThinkPHP网站目录权限设置
  12. 原创:js代码, 让dedecms支持Tag选择, 添加内容更为方便,不用手输Tag
  13. android 中uri.parse()用法
  14. JS实现回到页面顶部动画效果 2016.03.23
  15. 基于dijkstra算法求地铁站最短路径以及打印出所有的路径
  16. PHP代码审计---基础
  17. 我的第一个python web开发框架(25)——定制ORM(一)
  18. UVa 11021 Tribles (概率DP + 组合数学)
  19. linux系统入门一些常用命令解析
  20. c++中浮点数精度设置

热门文章

  1. js控制a标签点击事件 触发下载
  2. UGUI优化总结
  3. atoi和stoi
  4. Java获取永久图文素材中的网页端Url
  5. Dijkstra算法以及各种海量数据排序算法
  6. JDBC(1)-连接数据库
  7. 【随笔】使用apt-spy来更新你的debian源
  8. 利用git工具命令简单的从github上拷贝和上传代码
  9. Firebird Procedure 带返回的存储过程
  10. 四:SpringThinking