【Swift】UIImageをリサイズする方法!UIGraphicsImageRendererFormatの使い方

この記事からわかること

  • SwiftUIImageリサイズする方法
  • 画像圧縮する方法
  • UIGraphicsImageRendererFormat使い方
  • 非推奨UIGraphicsBeginImageContextWithOptions代替

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

UIImageをリサイズする方法:UIGraphicsImageRendererFormat

公式リファレンス:UIGraphicsImageRendererFormat

SwiftでUIImageを異なる大きさにリサイズするにはUIGraphicsImageRendererFormatを使用します。例えば引数にパーセンテージを受け取りそのサイズにリサイズするには以下のように実装します。

extension UIImage {
    func resize(withPercentage percentage: CGFloat) -> UIImage? {
        // リサイズ後のUIImageの大きさを定義
        let resize = CGSize(width: size.width * percentage, height: size.height * percentage)
        // リサイズするための描画フォーマットを作成
        let format = UIGraphicsImageRendererFormat.default()
        // リサイズ時に使用されるスケールを設定(元のスケールとする)
        format.scale = scale
        // リサイズ時に使用される描画レンダラーを作成
        let renderer = UIGraphicsImageRenderer(size: resize, format: format)
        // 描画レンダラーを使用して、元の画像を指定されたサイズにリサイズ
        let resizedImage = renderer.image { _ in
            draw(in: CGRect(origin: .zero, size: resize))
        }
        return resizedImage
    }
}

使う時はこんな感じ。

let resizeImg = myImage.resize(withPercentage: 0.1)

UIGraphicsBeginImageContextWithOptions

公式リファレンス:UIGraphicsBeginImageContextWithOptions

別の方法としてUIGraphicsBeginImageContextWithOptionsを使用した方法もありますが、こちらは非推奨になってしまったようです。

extension UIImage {
    func resize(withPercentage percentage: CGFloat) -> UIImage? {
        let resize = CGSize(width: size.width * percentage, height: size.height * percentage)
        UIGraphicsBeginImageContextWithOptions(resize, false, 0.0)
        draw(in: CGRect(origin: .zero, size: resize))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return resizedImage
    }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index