LoginSignup
8
8

More than 5 years have passed since last update.

CIGaussianBlur(CoreImage)の出力サイズがiOS9で変わった

Posted at

CIGaussianBlurでぼかした結果の画像サイズがiOS8以前とiOS9で変わったように見えます。

検証コード

  • Xcode 6.4 (SDK 8.4) + Swift
ViewController.swift
import UIKit

func blur(orgImage: UIImage, radius: CGFloat) -> UIImage {
    let filteredImage = CIImage(CGImage: orgImage.CGImage)
    let blurFilter = CIFilter(name: "CIGaussianBlur")
    blurFilter.setDefaults()
    blurFilter.setValue(filteredImage, forKey: kCIInputImageKey)
    blurFilter.setValue(radius, forKey: "InputRadius")
    return UIImage(CIImage: blurFilter.outputImage)!
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let orgImage = UIImage(named: "Test")!
        let blurImage = blur(orgImage, 3)
        println("\(orgImage.size) -> \(blurImage.size)")
        view.addSubview(UIImageView(image: blurImage))
    }
}

※Retinaを考慮しないものとしています。

検証結果

iOS8
(48.0, 48.0) -> (66.0, 66.0)
iOS9 + iPad Air
(48.0, 48.0) -> (80.0, 80.0)

iOS9の方が余白が多く確保されるようになったようです。

何が困るか

ぼやかした画像をアニメーションで拡大縮小するときに、framesizeに固定値を入れてしまうと、iOS8以前と9とで見た目の画像サイズが変わってしまいます。アニメーション後のsizeではなく倍率を固定値にすることで回避しました。
(iOS8以前はたぶんblur値 * 3が左右上下に拡大するような計算式だと思いますので、自前で出力結果のサイズを調整するのも手かもしれません...)

何故このような改変が有ったんでしょうね。

8
8
0

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
8
8