この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
UIImage
を角丸にしたいと思い、「UIImage cornerRadius」と調べると、UIImageView
を角丸にする方法が沢山出てきて困ってしまいました。同じ境遇の方の助けになればと思い、今回はUIImage
を角丸にする方法を記載しておきます。
環境
- Xcode 14
はじめに
UIImageViewを角丸にする方法
imageView.layer.cornerRadius = 22
Imageを角丸にする方法
Image("somethingYouWantToShow")
.resizable()
.frame(width: 200, height: 200)
.cornerRadius(20)
上記のような感じでImage
やUIImageView
の角丸は手軽に出来ます。
UIImageを角丸にする
UIImage
を角丸にする為にUIGraphicsImageRenderer
を使用して角丸画像を作成していきます。
今回はUIImage
のExtensionを作成して、汎用的に使えるようにしてみます。
extension UIImage {
func roundedCorners(radius: CGFloat) -> UIImage {
return UIGraphicsImageRenderer(size: self.size).image { context in
let rect = context.format.bounds
// Rectを角丸にする
let roundedPath = UIBezierPath(roundedRect: rect,
cornerRadius: radius)
roundedPath.addClip()
// UIImageを描画
draw(in: rect)
}
}
}
今回は特にリサイズ等は行わないのでUIGraphicsImageRenderer
のサイズには自身のサイズを渡しています。
その後、UIGraphicsImageRendererContext
のformat.bounds
から今回のレンダラーのboundsが取得出来るので画像のCGRect
を取得します。そのCGRect
に角丸を加える為、UIBezierPath
に引数で受け取ったcornerRadius
の値を渡します。
角丸用のパスができたので、addClip
を使用して現在の形状をクリッピングパスにします。
あとは、draw(in:)
メソッドを使用して、指定したrectで描画すると、クリッピングパスが反映された形状のUIImage
が出来上がります。
使用例
角丸無し
Image(uiImage: UIImage(named: "lilossa")!)
角丸有り
Image(uiImage: UIImage(named: "lilossa")!
.roundedCorners(radius: 40))
おわりに
UIGraphicsImageRenderer
を使用して、UIImage
を好きな形状に加工できることが分かりました。大人の事情でUIImage
自体を角丸にしたい方にこの記事が届けばと思います。