Skip to content

Instantly share code, notes, and snippets.

@yoheiMune
Created February 20, 2019 06:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yoheiMune/22bba3ab48cb841d5b40b03c195df324 to your computer and use it in GitHub Desktop.
Save yoheiMune/22bba3ab48cb841d5b40b03c195df324 to your computer and use it in GitHub Desktop.
//
// FilterViewController.swift
// CameraFilter
//
// Created by Munesada Yohei on 2019/02/19.
// Copyright © 2019 Munesada Yohei. All rights reserved.
//
import UIKit
class FilterViewController : UIViewController {
// ユーザーが選択した画像.
var image: UIImage!
// 温かみフィルターを使うか
var warmFilterEnabled = false
// オリジナル画像View.
@IBOutlet weak var originalImageView: UIImageView!
// フィルターをかけた画像View.
@IBOutlet weak var filteredImageView: UIImageView!
override func viewDidLoad() {
self.title = "フィルター加工しよう!"
// 最初は、どちらのImageViewにも、ユーザーの選択した画像を表示する.
self.originalImageView.image = image
self.filteredImageView.image = image
}
// 温かみを追加ボタンがタップされた.
@IBAction func onTapWarm(_ sender: Any) {
// 温かみフィルターを利用するかを、トグルする.
self.warmFilterEnabled = !self.warmFilterEnabled
// フィルター適用.
self.adaptFilter()
}
// スライダーで値が変わった.
@IBAction func onChangeSlider(_ sender: Any) {
}
// 画像にフィルターをかけます.
private func adaptFilter() {
// 加工対象の画像を用意します.
guard var image = self.image else {
return
}
// 温かみフィルターがONの場合は、適用します.
if self.warmFilterEnabled {
// CIImageに変換します.
guard let ciImage = CIImage(image: image) else {
return
}
// 温かみフィルターを作成します.
guard let filter = CIFilter(name: "CIPhotoEffectTransfer") else {
return
}
// 温かみフィルターを適用します.
filter.setDefaults()
filter.setValue(ciImage, forKey: kCIInputImageKey)
// CIImage から CGImage に変換します.
guard
let outputCIImage = filter.outputImage,
let cgImage = CIContext(options: nil).createCGImage(outputCIImage, from: outputCIImage.extent) else {
return
}
// CGImage から UIImage に変換します.
let filteredImage = UIImage(cgImage: cgImage, scale: 1, orientation: image.imageOrientation)
// 加工対象の画像の変数に代入します.
image = filteredImage
}
// フィルター画像Viewに反映します.
self.filteredImageView.image = image
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment