iPhone
iOS
CoreImage

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なりに突っ込んでおしまい!