Swift6行で UIView を UIImage に変換してサクッと画像を保存してみる
この記事でできるもの
下記のように特定の View(赤枠の UIView) を UIImage に変換して、フォトライブラリーに保存できるようになります。
どうやるの?
- UIView から UIImage を取得できる Extension Property を追加する
- 取得した画像をフォトライブラリーに保存する
実装してみる
プロパティを追加
それでは UIView に image
プロパティを追加します。
extension UIView { var image: UIImage { UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0) let context: CGContext = UIGraphicsGetCurrentContext()! layer.render(in: context) let capturedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return capturedImage } }
何をしてるのか初見だと分かりづらいので説明を加えます。まずは UIGraphicsBeginImageContextWithOptions()
でビットマップに
レンダリングするための描画構成をグラフィックイメージコンテキストのスタックにプッシュします。UIGraphicsGetCurrentContext()
で カレントのグラフィックコンテキストを取得して、それを使って指定の View のレイヤーとサブレイヤーを指定したコンテキストに
レンダリングします(今回は UIGraphicsBeginImageContextWithOptions
)。最後に UIGraphicsGetImageFromCurrentImageContext
で
カレントのイメージコンテキスト にもとづいた Image を取得して、UIGraphicsEndImageContext
でコンテキストスタックの一番上を
削除します(今回の場合は UIGraphicsBeginImageContextWithOptions()
)。
参考
- https://developer.apple.com/documentation/uikit/1623912-uigraphicsbeginimagecontextwitho?language=objc
- https://developer.apple.com/documentation/quartzcore/calayer/1410909-render
- https://developer.apple.com/documentation/uikit/1623933-uigraphicsendimagecontext
- https://qiita.com/yosshi4486/items/127fcb6b63dc0cd6f84a
画像をフォトライブリーに保存する
毎度おなじみの UIImageWriteToSavedPhotosAlbum()
で画像が保存できていれば完了です。
func saveImage(image: UIImage){ UIImageWriteToSavedPhotosAlbum(image, self, nil, nil) }