[Swift] 画像のサムネイル生成(縮小&切り抜き)

More than 1 year has passed since last update.

Swiftで固定サイズのサムネイルを生成するサンプル。画像を縮小し、中心から切り取る(Resize and crop)。

PHPでいうところの、Imagick::cropThumbnailImage()の処理。


  • 2017-1-1 Swift3のコードに変更しました。


コード

    func cropThumbnailImage(image :UIImage, w:Int, h:Int) ->UIImage

{
// リサイズ処理
let origRef = image.cgImage
let origWidth = Int(origRef!.width)
let origHeight = Int(origRef!.height)
var resizeWidth:Int = 0, resizeHeight:Int = 0

if (origWidth < origHeight) {
resizeWidth = w
resizeHeight = origHeight * resizeWidth / origWidth
} else {
resizeHeight = h
resizeWidth = origWidth * resizeHeight / origHeight
}

let resizeSize = CGSize.init(width: CGFloat(resizeWidth), height: CGFloat(resizeHeight))

UIGraphicsBeginImageContext(resizeSize)

image.draw(in: CGRect.init(x: 0, y: 0, width: CGFloat(resizeWidth), height: CGFloat(resizeHeight)))

let resizeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

// 切り抜き処理

let cropRect = CGRect.init(x: CGFloat((resizeWidth - w) / 2), y: CGFloat((resizeHeight - h) / 2), width: CGFloat(w), height: CGFloat(h))
let cropRef = resizeImage!.cgImage!.cropping(to: cropRect)
let cropImage = UIImage(cgImage: cropRef!)

return cropImage
}


実行結果

入力画像

スクリーンショット 2014-11-30 22.00.06.png

出力画像(300x300)

スクリーンショット 2014-11-30 22.01.06.png


参考