108
97

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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

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

108
97
2

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
108
97

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?