CoreImageとは?
CoreImageを使えば簡単に画像にフィルターを通すことができます。
Instagramみたいなフィルターもすぐ作れます。
参考にしたURL:http://www.raywenderlich.com/22167/beginning-core-image-in-ios-6
フィルターの掛け方
ざっと説明すると以下のような感じ
- 画像データ(UIImageなり、XXX.pngなり)を元に、CIImageのオブジェクトを作成
- CIContextのオブジェクトを作成する
- CIFilterのオブジェクトを作成する
- 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なりに突っ込んでおしまい!