UIImageをリサイズして返すメソッド

f:id:daihase:20190809100049p:plain

こんにちは、daihaseです。 今日はまた久々にSwiftネタを。

お題にあるUIImageをリサイズして返すメソッドですが、使い道としては、例えばアプリ側で取得した画像をサーバーにアップする際に、通常だと縦横サイズが大きすぎるので容量もデカくなってしまいます。それをリサイズしてからアップしたい、とかですかね。

まずUIImageを拡張したファイルを用意。

import UIKit

extension UIImage {
    func resize(width: CGFloat, height: CGFloat) -> UIImage {
        let size = CGSize(width: width, height: height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        self.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        guard let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() else { assertionFailure(); return UIImage() }
        UIGraphicsEndImageContext()
        
        return image
    }
}

 

ViewController.swiftで、このresizeメソッドを使ってみます。

import UIKit

class ViewController: UIViewController {
    private var iconImage = UIImage(named: "icon")
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupImage()
    }
    
    private func setupImage() {
        guard let icon =  iconImage?.resize(width: 100, height: 100) else { return }
        
        let imageView = UIImageView(frame: CGRect(
            x: view.center.x - icon.size.width / 2,
            y: view.center.y - icon.size.height / 2,
            width: icon.size.width,
            height: icon.size.height))
        imageView.image = icon
        
        view.addSubview(imageView)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

 

あらかじめAssets.xcassetsに画像を追加しておくのを忘れずに。

このサンプルの例だと、UIImageViewのframeを変えてやれば同じような表示のされ方をするので、このメソッドの意味があまりないんですが、実際は冒頭であげたようなサイズ制限のある場所へ画像をアップする処理などを書く必要がある場合に効果が発揮出来るかと思います。

 

それでは良い開発ライフを〜