iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift6行で UIView を UIImage に変換してサクッと画像を保存してみる

この記事でできるもの

下記のように特定の View(赤枠の UIView) を UIImage に変換して、フォトライブラリーに保存できるようになります。

f:id:yum_fishing:20200729221018j:plain f:id:yum_fishing:20200729221035p:plain

どうやるの?

  1. UIView から UIImage を取得できる Extension Property を追加する
  2. 取得した画像をフォトライブラリーに保存する

実装してみる

プロパティを追加

それでは 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())。

参考

画像をフォトライブリーに保存する

毎度おなじみの UIImageWriteToSavedPhotosAlbum() で画像が保存できていれば完了です。

    func saveImage(image: UIImage){
        UIImageWriteToSavedPhotosAlbum(image, self, nil, nil)
    }

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com