【iOS】【swift】たった数行で画像のフィルタ/エフェクトが実現できる超便利フレームワークCoreImage

こちらのswift向けに書いてみました。(改めてタイトルを見るとアレですね。。

http://blog.oneworld-inc.com/entry/2013/02/23/000231


CoreImageを利用したフィルタをいくつかご紹介させていただきます。
iOSのバージョンが上がると、CoreImageの機能も拡張されたりするので
カメラアプリなど作る場合は多様する事もあるかもしれません。

今回紹介させていただく内容は、CIFilterを使い分ける事になります。


###セピア【CISepiaTone】

![20130222140259.png](https://qiita-image-store.s3.amazonaws.com/0/35343/efdcca55-674b-8255-af95-e69f6accc6cd.png)

以下コード


```swift

// image が 元画像のUIImage
let ciImage:CIImage = CIImage(image:image);
let ciFilter:CIFilter = CIFilter(name: "CISepiaTone")
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(0.8, forKey: "inputIntensity")
let ciContext:CIContext = CIContext(options: nil)
let cgimg:CGImageRef = ciContext.createCGImage(ciFilter.outputImage, fromRect:ciFilter.outputImage.extent())

//image2に加工後のUIImage
let image2:UIImage? = UIImage(CGImage: cgimg, scale: 1.0, orientation:UIImageOrientation.Up)


```

CIImageを生成し、それに対して、CIFilterを適用する形になっているかと思います。
基本的には他の加工も同様ですので、次以降はCIFilterのみ記載します。

###グレースケール【CIColorMonochrome】

![20130222141747.png](https://qiita-image-store.s3.amazonaws.com/0/35343/2a252ccb-af58-dd79-e190-c30bde250ce1.png)


```swift

let ciFilter:CIFilter = CIFilter(name: "CIColorMonochrome")
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(CIColor(red: 0.75, green: 0.75, blue: 0.75), forKey: "inputColor")
ciFilter.setValue(1.0, forKey: "inputIntensity")

```


###色の反転【CIColorInvert】

![20130222141752.png](https://qiita-image-store.s3.amazonaws.com/0/35343/2f775360-7474-910e-2677-c9c28fa0ac21.png)


```swift

let ciFilter:CIFilter = CIFilter(name: "CIColorMonochrome")
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(CIColor(red: 0.75, green: 0.75, blue: 0.75), forKey: "inputColor")
ciFilter.setValue(1.0, forKey: "inputIntensity")

```


公式ドキュメントにもありますが、


>CIColorInvert フィルタは画像の色を反転し、画像をネガフィルムのように見せますが、カラーネガフィルムのようなオレンジがかった色ではありません。色の反転フィルタは単にカラーを反転するだけなので、カラーネガフィルムを模倣するものではありません。


###偽色【CIFalseColor】

![20130222141942.png](https://qiita-image-store.s3.amazonaws.com/0/35343/c97bd162-b759-3a89-cbad-84d5e0053969.png)


```swift

let ciFilter:CIFilter = CIFilter(name: "CIFalseColor" )
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(CIColor(red: 0.44, green: 0.5, blue: 0.2), forKey: "inputColor0")
ciFilter.setValue(CIColor(red: 1, green: 0.92, blue: 0.50), forKey: "inputColor1")

```


###色調節フィルタ（Color Adjustment Filters）

![20130222233708.png](https://qiita-image-store.s3.amazonaws.com/0/35343/28e13b5c-8376-d73b-cb65-5d0555f7b789.png)


```swift

let ciFilter:CIFilter = CIFilter(name: "CIColorControls" )
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(1.0, forKey: "inputSaturation")
ciFilter.setValue(0.5, forKey: "inputBrightness")
ciFilter.setValue(3.0, forKey: "inputContrast")

```

###トーンカーブ【CIToneCurve】


![20130222233736.png](https://qiita-image-store.s3.amazonaws.com/0/35343/d8e49d92-aadf-4711-0289-537ba82fc6c4.png)


```swift

let ciFilter:CIFilter = CIFilter(name: "CIToneCurve" )
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(CIVector(x: 0.0, y: 0.0), forKey: "inputPoint0")
ciFilter.setValue(CIVector(x: 0.25, y: 0.1), forKey: "inputPoint1")
ciFilter.setValue(CIVector(x: 0.5, y: 0.5), forKey: "inputPoint2")
ciFilter.setValue(CIVector(x: 0.75, y: 0.9), forKey: "inputPoint3")
ciFilter.setValue(CIVector(x: 1.0, y: 1.0), forKey: "inputPoint4")

```

あくまで一例です。


>”inputPoint0”〜”inputPoint4”までの（x、y）座標を設定します。
>”inputPoint0”　デフォルト値は”[0 0]”
>”inputPoint1”　デフォルト値は”[0.25 0.25]”
>”inputPoint2”　デフォルト値は”[0.5 0.5]”
>”inputPoint3”　デフォルト値は”[0.75 0.75]”
>”inputPoint4”　デフォルト値は”[1 1]”


###色相調整【CIHueAdjust】

![20130222233825.png](https://qiita-image-store.s3.amazonaws.com/0/35343/9ddc84a2-8bf1-cee5-756c-df4eab9fc2c9.png)

```swift

let ciFilter:CIFilter = CIFilter(name: "CIHueAdjust" )
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(3.14, forKey: "inputAngle")

```


>”inputAngle”　HSV色空間およびHLS色空間における色相の位置を指定する値（NSNumber）。これは 0.0 ～ 2 pi までの範囲の角度です。値 0 は赤色を示します。緑色は pi/3 ラジアンに相当し、青色は 2/3 pi ラジアンです。
>デフォルト値は0 最大値3.14 最小値-3.14です。


以上です。面白そうなものがもしあったら追記するかもしれません。