公開日:2020/04/03更新日:2020/08/03
【Swift CIFilter】CIHighlightShadowAdjustでハイライトを補正する方法を解説

- 画像のハイライトを補正する方法が知りたい。
SwiftのCore Imageには、CIFilterという、画像の補正を行うことができるクラスがあります。
CIFilterには、さまざなま画像補正のフィルタが用意されております。本記事では、その中のCIHighlightShadowAdjustというフィルタを使用し、画像のハイライトを補正する方法を解説致します。
目次
CIHighlightShadowAdjustについて
CIHighlightShadowAdjustは、ハイライトとシャドウを補正する際に使用されるCore Image Filterです。
CIHighlightShadowAdjustには、以下のパラメータがあります。
inputImage | 入力画像(補正をかける画像) |
---|---|
inputHighlightAmount | ハイライト値 デフォルト値: 1、最小値: 0、最大値: 1 |
inputShadowAmount | シャドウ値 デフォルト値: 0、最小値: -1、最大値: 1 |
inputRadius | ハイライトとシャドウの半径 デフォルト値: 0、最小値: 0、最大値: – |
Reference: CIHighlightShadowAdjust | Core Image Filter Reference
CIHighlightShadowAdjustでハイライトを補正する方法
では、CIHighlightShadowAdjustで、ハイライトを補正する方法を解説致します。
以下は、スライダーを動かすと、その値をハイライト値として、画像の補正を行うサンプルコードです。
- ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var valueSlider: UISlider!
@IBOutlet weak var valueLabel: UILabel!
private var ciFilter: CIFilter!
override func viewDidLoad() {
super.viewDidLoad()
title = "ハイライト"
guard let uiImage = UIImage(named: "sample"), let ciImage = uiImage.ciImage ?? CIImage(image: uiImage) else { return }
imageView.image = uiImage
// Filterに合わせた最大値、最小値、初期値の設定
valueSlider.maximumValue = 1
valueSlider.minimumValue = 0
valueSlider.value = 1
valueLabel.text = String(valueSlider.value)
// CIFilterの生成
ciFilter = CIFilter(name: "CIHighlightShadowAdjust")
// 入力画像の設定
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
}
@IBAction func valueChanged(_ sender: UISlider) {
valueLabel.text = String(sender.value)
// ハイライトの設定
ciFilter.setValue(sender.value, forKey: "inputHighlightAmount")
// Filter適応後の画像を表示
if let filteredImage = ciFilter.outputImage {
imageView.image = UIImage(ciImage: filteredImage)
}
}
}
CIFilter(name: “CIHighlightShadowAdjust”)で、CIHighlightShadowAdjustフィルタのインスタンスを生成しております。
その後、生成したCIFilterのインスタンスに対し、setValue(ciImage, forKey: kCIInputImageKey)で、入力画像の設定を行っております。
スライダーの値が変更されたら、setValue(sender.value, forKey: “inputHighlightAmount”)で、ハイライト値の設定を行います。
そして、outputImageで、ハイライトが補正されたCIImageを取得し、UIImageに変換後、画面に表示しております。
- CIFilter(name: “CIHighlightShadowAdjust”)で、フィルタを生成する
- setValue(CIImage, forKey: kCIInputImageKey)で、入力画像を設定する
- setValue(ハイライト値, forKey: “inputHighlightAmount”)で、ハイライト値を設定する
- outputImageで、補正されたCIImageを取得する
まとめ
- CIFilter(name: “CIHighlightShadowAdjust”)で、フィルタを生成する
- setValue(CIImage, forKey: kCIInputImageKey)で、入力画像を設定する
- setValue(ハイライト値, forKey: “inputHighlightAmount”)で、ハイライト値を設定する
- outputImageで、補正されたCIImageを取得する
関連記事