【Swift】UIImageをリサイズする方法!UIGraphicsImageRendererFormatの使い方
この記事からわかること
- SwiftでUIImageをリサイズする方法
- 画像を圧縮する方法
- UIGraphicsImageRendererFormatの使い方
- 非推奨のUIGraphicsBeginImageContextWithOptionsの代替
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.1
- Swift:5.9
- macOS:Sonoma 14.1
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
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。