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の方が余白が多く確保されるようになったようです。
何が困るか
ぼやかした画像をアニメーションで拡大縮小するときに、frame
のsize
に固定値を入れてしまうと、iOS8以前と9とで見た目の画像サイズが変わってしまいます。アニメーション後のsize
ではなく倍率を固定値にすることで回避しました。
(iOS8以前はたぶんblur値 * 3
が左右上下に拡大するような計算式だと思いますので、自前で出力結果のサイズを調整するのも手かもしれません...)
何故このような改変が有ったんでしょうね。