LoginSignup
14
14

More than 5 years have passed since last update.

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

Posted at

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

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14