LoginSignup
16
18

More than 5 years have passed since last update.

[swift] [iOS] 実は簡単な画像フィルター

Last updated at Posted at 2015-12-18

画像加工で周りを暗くして真ん中だけ元の色を残すやり方が以外に簡単だったので

まずは元の画像はこんな感じ

スクリーンショット 2015-12-18 13.15.03.png

結果

スクリーンショット 2015-12-18 13.15.36.png

ここからがコード

記載するコードはこれだけ
※コメントのほうに@loveeさんから指摘して頂いたコードが
あるので下記のコードと照らしあわせてみてください。

override func viewDidLoad() {
    super.viewDidLoad()

    viewImage.image = UIImage(named: "IMG_3368")

    let filteredImage = CIImage(image: self.viewImage.image!)
    let filter = CIFilter(name: "CIVignette")

    filter!.setValue(filteredImage, forKey: "inputImage")
    filter!.setValue(NSNumber(float: 9.0), forKey: "inputIntensity")


    let ciContext = CIContext(options: nil)
    let imageRef = ciContext.createCGImage((filter?.outputImage)!, fromRect: (filter?.outputImage!.extent)!)
    let outputImage = UIImage(CGImage: imageRef)
    self.viewImage.image = outputImage

}

とりあえず適当な画像をいれる

code
viewImage.image = UIImage(named: "任意の画像")

UIImageをCIImageにキャスト

code
let filteredImage = CIImage(image: self.viewImage.image!)

フィルターを選ぶ

code
let filter = CIFilter(name: "CIVignette")
※フィルターは色々あるのでこちらを参考に色々ためしてみてくださいー
Core Image Filter Reference by Apple

フィルターに値を入れていく

code
イメージをセット
filter!.setValue(filteredImage, forKey: "inputImage")

周りの色の濃さを変更
filter!.setValue(NSNumber(float: 9.0), forKey: "inputIntensity")
※NSNumber(float: 9.0)ここの数値を変更すると色の濃さが変わる

コンテキストをつくってフィルターを適応

※このCIContextがいまいち意味がわからん
let ciContext = CIContext(options: nil)
let imageRef = ciContext.createCGImage((filter?.outputImage)!, fromRect: filter?.outputImage!.extent)!)

フィルターを通した画像を変数に入れる

code
let outputImage = UIImage(CGImage: imageRef)

フィルタ加工した画像を代入してやる

self.viewImage.image = outputImage

とまぁこんな感じで簡単だった。
処理が結構重いのか表示に少し時間がかかるので、そのへんの細かいところは
UXでカバーしてみる。。。

間違っているところなどあれば、優しくつっこんでください!

16
18
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18