Posted at

CoreImageを使った画像フィルター実装方法

More than 5 years have passed since last update.


CoreImageとは?

CoreImageを使えば簡単に画像にフィルターを通すことができます。

Instagramみたいなフィルターもすぐ作れます。

参考にしたURL:http://www.raywenderlich.com/22167/beginning-core-image-in-ios-6


フィルターの掛け方

ざっと説明すると以下のような感じ


  1. 画像データ(UIImageなり、XXX.pngなり)を元に、CIImageのオブジェクトを作成

  2. CIContextのオブジェクトを作成する

  3. CIFilterのオブジェクトを作成する

  4. CIFIlterのオブジェクトの中のoutputImage関数の返り値を受け取り(CIImage)UIImageに再度変換


1. 画像データ(UIImageなり、XXX.pngなり)を元に、CIImageのオブジェクトを作成


UIImageから作成する場合

CIImage *CIMAGEOBJECT = [CIImage imageWithCGImage:UIIMAGEOBJECT.CGImage];


XXX.pngなりから作成する場合

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"IMAGENAME" ofType:@"png"];

NSURL *fileNameAndPath = [NSURL fileURLWithPath:filePath];

CIImage *CIIMAGEOBJECT = [CIImage imageWithContentsOfURL:fileNameAndPath];


2. CIContextのオブジェクトを作成する

フィルターを通すときにCPUをベースにするのかGPUをベースにするのかとかを選べる。再利用できるので毎回オブジェクトを作成する必要はない。

作業工程4. で行う、CIImage -> UIImageへの変換時にimageWithCIImageを使用する場合は作成不要

nilのところには、様々なパラムを渡すことができる

CIContext *context = [CIContext contextWithOptions:nil];


3. CIFilterのオブジェクトを作成する

CIFilter *FILTEROBJECT = [CIFilter filterWithName:@"CISepiaTone" keysAndValues: kCIInputImageKey, CIIMAGEOBJECT, @"inputIntensity", @0.8, nil];


4. CIFIlterのオブジェクトの中のoutputImage関数の返り値を受け取り(CIImage)UIImageに再度変換

CIImage *outputImage = [FILTEROBJECT outputImage];

UIImage *UIIMAGEOBJECT = [UIImage imageWithCIImage:outputImage];

あとは出来上がったUIIMAGEOBJECTをUIImageViewなりに突っ込んでおしまい!