🧬
[Swift]CIFilter 超速サンプル
CIFilterを使うと、画像にフィルターをかけられる。
サンプルコード(単独)
フィルター種類がたくさんある中から、サンプルで彩度と色反転のサンプルコード。
public extension UIImage {
// 彩度設定
func saturation(value: CGFloat) -> UIImage? {
guard let ciImage = CIImage(image: self) else {
return nil
}
guard let ciFilter = CIFilter(name: "CIColorControls") else {
return nil
}
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
ciFilter.setValue(value, forKey: "inputSaturation")
guard let ciFilterOutputImage = ciFilter.outputImage else {
return nil
}
return UIImage(ciImage: ciFilterOutputImage, scale: 1.0, orientation: .up)
}
// 色反転
func invertColor() -> UIImage? {
guard let ciImage = CIImage(image: self) else {
return nil
}
guard let ciFilter = CIFilter(name: "CIColorInvert") else {
return nil
}
ciFilter.setValue(ciImage, forKey: kCIInputImageKey)
guard let ciFilterOutputImage = ciFilter.outputImage else {
return nil
}
return UIImage(ciImage: ciFilterOutputImage, scale: 1.0, orientation: .up)
}
サンプルコード(複合)
複数フィルターを合わせることもできる。
色反転+彩度設定のサンプル。
// 色反転+彩度設定
func invertAndSaturation(value: CGFloat) -> UIImage? {
guard let ciImage = CIImage(image: self) else {
return nil
}
guard let ciInvertFilter = CIFilter(name: "CIColorInvert") else {
return nil
}
ciInvertFilter.setValue(ciImage, forKey: kCIInputImageKey)
guard let ciInvertFilterOutputImage = ciInvertFilter.outputImage else {
return nil
}
guard let ciSaturationFilter = CIFilter(name: "CIColorControls") else {
return nil
}
ciSaturationFilter.setValue(ciInvertFilterOutputImage, forKey: kCIInputImageKey)
ciSaturationFilter.setValue(value, forKey: "inputSaturation")
guard let ciSaturationFilterOutputImage = ciSaturationFilter.outputImage else {
return nil
}
return UIImage(ciImage: ciSaturationFilterOutputImage, scale: 1.0, orientation: .up)
}
}
公式リファレンス
公式のリファレンス。
指定パラメータや見た目のサンプルも載っていて分かりやすい。
Core Image Filter Reference
Discussion