しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

CoreImageのフィルターを試してみる(CICategoryBlur)

CoreImageを使うと、簡単に画像にフィルターをかける事ができます。
今回はCoreImageで用意されているフィルターをいくつか試してみました。

元画像は下のものです、画像はぱくたそ様のものを使っています。

f:id:llcc:20170904131535p:plain

import UIKit

class ViewController: UIViewController {
    let imageView = UIImageView(image: #imageLiteral(resourceName: "image"))
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.frame = CGRect(
            x: (view.frame.width - #imageLiteral(resourceName: "image").size.width) / 2, y: 20,
            width: #imageLiteral(resourceName: "image").size.width, height: #imageLiteral(resourceName: "image").size.height)
        view.addSubview(imageView)
    }
}

今回試すフィルター

今回はCICategoryBlurというカテゴリーのフィルターを試します。
一覧は下のものです。

CIBoxBlur
CIDiscBlur
CIGaussianBlur
CIMaskedVariableBlur
CIMedianFilter
CIMotionBlur
CINoiseReduction
CIZoomBlur

一覧の取得は以下メソッドで行いました。

CIFilter.filterNames(inCategory: kCICategoryBlur)

結果

フィルターの適用は下のように行いました。
CIFilterのフィルターに渡す引数でフィルターを切り替える事ができます。

let filter = CIFilter(name: "CIBoxBlur")
let ciImage = CIImage(image: #imageLiteral(resourceName: "image"))
filter?.setValue(ciImage, forKey: kCIInputImageKey)
if let filteredImage = filter?.outputImage {
    imageView.image = UIImage(ciImage: filteredImage)
}

CIBoxBlur

f:id:llcc:20170904140901p:plain

CIDiscBlur

f:id:llcc:20170904140940p:plain

CIGaussianBlur

f:id:llcc:20170904141002p:plain

CIMaskedVariableBlur

こちらはマスク画像が必要です。
マスク画像の、白い部分にブラーがかかります。

今回は下のようなマスク画像を用意しました。

f:id:llcc:20170904142406p:plain

import UIKit
import CoreImage

class ViewController: UIViewController {
    let imageView = UIImageView(image: #imageLiteral(resourceName: "image"))
    var timer: Timer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.frame = CGRect(
            x: (view.frame.width - #imageLiteral(resourceName: "image").size.width) / 2, y: 20,
            width: #imageLiteral(resourceName: "image").size.width, height: #imageLiteral(resourceName: "image").size.height)
        view.addSubview(imageView)
        
        let filter = CIFilter(name: "CIMaskedVariableBlur")
        let ciImage = CIImage(image: #imageLiteral(resourceName: "image"))
        filter?.setValue(ciImage, forKey: kCIInputImageKey)
         filter?.setValue(CIImage(image: #imageLiteral(resourceName: "image2")), forKey: "inputMask")
        if let filteredImage = filter?.outputImage {
            imageView.image = UIImage(ciImage: filteredImage)
        }
    }
}

f:id:llcc:20170904142420p:plain

CIMedianFilter

f:id:llcc:20170904141051p:plain

CIMotionBlur

f:id:llcc:20170904141123p:plain

CINoiseReduction

f:id:llcc:20170904141147p:plain

CIZoomBlur

f:id:llcc:20170904141213p:plain

まとめ

フィルター一覧や各フィルターに渡せるパラメータは下ドキュメントから確認できます。

Core Image Filter Reference