BitmapファイルをBase64でエンコーディングする

C#で画像ファイルをデータベースへ保存する場合、バックアップの利便性を考慮するとBlob形式で保存するよりも文字列として保存したい。たとえばPostgresではBlob型はテーブルの列に参照先の情報(ポインタ)が保存されるだけなので、データのバックアップ時に取り扱う方法に苦慮する。

そこで、Text型の列に保存すれば文字列として保存されるためバックアップ時の問題は解決することになる。とはいうものの、Base64からデコードして画像ファイルを復元するコストは発生するが、そこはバックアップなどのとのトレードオフと言うことになる。

画像ファイルを保存する場合の手順としては、画像ファイルをMemoryStreamへ保存して、MemoryStreamからバイト配列を取得する。そして、Base64へエンコーディングして文字列として取得するという流れになる。

[sourcecode language="csharp"] using(var ms = new MemoryStream()) { bitmap.Save(ms, ImageFormat.Bmp);

    // base64エンコーディングを行い画像を文字列として保存する
    string s = Convert.ToBase64String(ms.GetBuffer());

}

[/sourcecode] これでバックアップは楽になる…はず。