iOS
gpuimage
Swift

GPUImageでフィルターを重ねがけ

カメラアプリでフィルターを掛けたい場合、GPUImageはお手軽にサクッと実装できて、とても良い感じだと思いました。
下記のように複数フィルターを重ねて数行でそれなりの良い感じのフィルターを作成することができます。

CameraViewController.swift
import GPUImage
class CameraViewController: UIViewController {

    var videoCamera: GPUImageVideoCamera?
    var filterGroup: GPUImageFilterGroup?

    override func viewDidLoad() {

        videoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPresetHigh, cameraPosition: .back)
        videoCamera!.outputImageOrientation = .portrait;

        // 明るさ
        let brightnessFilter = GPUImageBrightnessFilter()
        brightnessFilter.brightness = 0.01

        // コントラスト
        let contrastFilter = GPUImageContrastFilter()
        contrastFilter.contrast = 1.1

        // 彩度
        let satureationFilter = GPUImageSaturationFilter()
        satureationFilter.saturation = 0.8

        // フィルターを重ねる
        brightnessFilter.addTarget(contrastFilter)
        contrastFilter.addTarget(satureationFilter)

        // フィルターグループ生成
        filterGroup = GPUImageFilterGroup()
        filterGroup?.addFilter(brightnessFilter)
        filterGroup?.addFilter(contrastFilter)
        filterGroup?.addFilter(satureationFilter)

        filterGroup?.initialFilters = [brightnessFilter]
        filterGroup?.terminalFilter = satureationFilter

        videoCamera!.addTarget(filterGroup)
        filterGroup?.addTarget(self.view as! GPUImageView)

        videoCamera?.startCapture()
    }
}