Created
February 20, 2019 06:12
-
-
Save yoheiMune/22bba3ab48cb841d5b40b03c195df324 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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