この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
CX事業本部の平屋です。
本記事では、UIGraphicsImageRenderer
を使用して画像のリサイズや着色を行う実装を紹介します。
UIGraphicsImageRenderer
の概要は以下の記事で紹介しています。
検証環境
- macOS Catalina 10.15.6
- Xcode Version 12.4
リサイズを行う
早速実装を紹介します。
以下は、指定サイズにリサイズするresized(size:)
の実装例です。
リサイズ後のサイズを指定してUIGraphicsImageRenderer
を作成し、image(actions:)
メソッドの引数内で描画を行い、リサイズされたUIImage
を生成します。
import UIKit
extension UIImage {
func resized(size: CGSize) -> UIImage {
// リサイズ後のサイズを指定して`UIGraphicsImageRenderer`を作成する
let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image { (context) in
// 描画を行う
draw(in: CGRect(origin: .zero, size: size))
}
}
}
使用例
以下のようにサイズを指定して画像を生成できます。
imageView.image = UIImage(named: "star")?.resized(size: CGSize(width: 100, height: 100))
着色を行う
以下は、指定色に着色するtinted(color:)
の実装例です。1つの画像から色違いの画像を生成する場合などに使用できます。
UIGraphicsImageRenderer
を作成し、image(actions:)
メソッドの引数内で描画を行い、着色されたUIImage
を生成します。
import UIKit
extension UIImage {
func tinted(color: UIColor) -> UIImage {
// `UIGraphicsImageRenderer`を作成する
let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image { context in
// 背景を指定色で塗りつぶす
color.setFill()
context.fill(context.format.bounds)
// 背景と画像の重なっている部分が表示されるように描画する
draw(in: context.format.bounds,
blendMode: .destinationIn,
alpha: 1.0)
}
}
}
使用例
こちら元画像です。透明の背景に星が描かれています。
tinted(color:)
を使用して青く着色した画像を生成すると、
imageView.image = UIImage(named: "star")?.tinted(color: .blue)
以下の結果になります。
さいごに
本記事では、UIGraphicsImageRenderer
を使用して画像のリサイズや着色を行う実装を紹介しました。
UIGraphicsImageRenderer
を使えば、描画の処理を少し書くだけでリサイズや着色を実現できました! 画像加工の処理を実装をしている方の参考になれば幸いです。