使用CoreImage教程

使用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, 0);

    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

 

时间: 2024-10-22 05:11:57

使用CoreImage教程的相关文章

使用TFHpple解析html

使用TFHpple解析html https://github.com/topfunky/hpple   前期准备工作 引入静态库文件 添加库文件的 header search paths(注意,必须选中 All) 将从github上下载的源码包拖入工程当中 准备工作结束   使用详情 我们来解析网址 http://www.cnblogs.com/YouXianMing/ 中的title标签哦. 思路是这样子的: 1. 将网页转换成NSData 2. 按照标签值在NSData中数据进行查询 3.

解决win7系统无法进入操作中心的方法教程

  Windows操作中心是一个查看警报和执行操作的中心位置,它可帮助保持 Windows 稳定运行,不过在win7系统下,windows操作中心貌似很少用户会进入查看,不过不能因为我们不经常使用而对其不理不睬,近期有部分使用win7系统的用户向小编反映,在即的windows操作中心无法打开,对于出现该问题的用户我们应该如何解决呢?下面看小编为大家带来的解决方法! 解决win7系统无法进入操作中心的方法教程 1.首先,我们同时按下win7电脑键盘上的win+R快捷键打开电脑的运行窗口,在打开的运

解决win7系统所有中文显示乱码的方法教程

  在win7系统下我们如果把语言操作系统界面语言修改为英文后,有部分用户的电脑中的英文字体将显示乱码的问题,对于出现该问题是因为中文不是Unicode语言,用户在将系统语言设置为英文后,语言设置的非Unicode设置出问题而导致的,故此我们需要将非Unicode的语言修改为中文语言即可解决这个问题,下面我们看下具体的操作教程吧! 解决win7系统所有中文显示乱码的方法教程 1.点击开始菜单图标并单击打开控制面板. 2.在区域和语言设置-管理中,选择更改显示语言. 3.选择管理标签,并点击更改系

win7下使用U盘安装Ubuntu Kylin完全详解教程

安装失败了好几次,看了很多篇博客,最后终于成功了,并且做了这个win7下使用U盘安装Ubuntu的教程,希望能给大家带来帮助! 详细的图文步骤如下: 部分操作步骤转自 http://blog.csdn.net/dreamthen/article/details/8765472,感谢. 1.本次使用的是64位的ubuntu Kylin桌面版,iso镜像可以自己去官网下载,大约700MB 2.  将系统拷进U盘,制成u盘启动系统. 4.将电脑划分出来一个空盘,大小20G 足矣,也可以根据个人喜好,分

xcode-学习objective-c 基础教程遇到问题 例题03.06 word-length-3 编译出错

问题描述 学习objective-c 基础教程遇到问题 例题03.06 word-length-3 编译出错 #import int main(int argc, const char * argv[]) { FILE *wordFile = fopen ("/tmp/words.txt", "r"); char word[100]; while (fgets(*word,99,wordFile)) \这一行编译出现"Thread 1:EXC_BAD_AC

VHD安装Windows8系统图文教程

ImageX 是一个命令行工具,它可以在操作系统映像中使用共享的映像格式来创建.修改和部署映像.VHD是微软虚拟磁盘文件,Win7(专业版以上)及Win8原生支持从VHD启动.利用这两项技术实现win7.win8双系统,痛快的体验win8.优点是不必单独拿一个分区来装win8.卸载方便(省掉折腾硬盘分区.卸载时win8分区合并回去的麻烦),对原系统无影响,与实机安装几乎无差别的性能体验.缺点是不能休眠,无法完成系统评分,只适用于Windows 7,8,Windows Server 20008 R

Win8系统硬盘安装详细图文教程

Win8的RTM正式版的已经发布了MSDN下载,RTM的build是9200,和Win7不同的是,Win8只有两个版本,一个是类似Win7 家庭版的Core核心版,一个是类似Win7旗舰版和专业版二合一的Pro专业版,而安装方法也不同,Win8无论是核心版还是专业版,都是使用一个镜像进行安装,区别是输入的安装码不同,而安装不同的版本. Win8相关推荐: U盘安装Windows8教程 Windows 8 RTM正式版下载 1.首先下载上面链接给出的Win8,然后用winrar.winzip.7Z

硬盘安装Windows 8系统图文教程

没有光驱.没有光盘.没有U盘,照样安装一个全新的Windows 8!什么?你不信?那就看看软件小品如何教你使用硬盘安装一个全新的Windows 8!看了这篇图文并茂的硬盘安装Window8详细教程,我就不信你学不会!好了,开始动手吧! 一.准备工作: 可以正常工作的Windows xp/7操作系统以及容量大于3.5G的非系统分区; Windows 8 硬盘安装引导工具 nt6 hdd installer ; Windows 8 微软官方安装镜像(以下称Windows 8 镜像). 二.开始安装:

Photoshop打造另类脸面撕裂效果教程

今天我们就来教大家如何制作出这种撕裂的效果! 教程附上反相效果: 接下来我们开始讲解如何制作出这种效果,现在大家先准备好一张美女图片,然后跟着我们的步骤一步步的操作下去,最后你就能得到你想要的效果了! 第1步:打开素材图片,解锁背景图层.然后还要将画布调大些:点击菜单[图像],[画面大小],在原有的数值上各加大一些,如图示.之后在该图层下方新一个白色填充层. 第2步:载入图像选区(Ctlr+单击图像图层),新建并填充黑色图层,位于图像下方.然后再将该层向右下移动若干像素,变形,如图.拉开右下角,