Posted at

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

More than 3 years have passed since last update.

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

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

CoreImageを利用したフィルタをいくつかご紹介させていただきます。

iOSのバージョンが上がると、CoreImageの機能も拡張されたりするので

カメラアプリなど作る場合は多様する事もあるかもしれません。

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


セピア【CISepiaTone】

20130222140259.png

以下コード


// 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


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


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


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


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


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


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です。


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