【Python】Base64文字列をデコードして元のファイル(画像など)に復元する方法

Web APIやメール添付などで受け取った「Base64エンコードされた文字列」を、元のバイナリデータ(画像、PDF、音声ファイルなど)に戻して保存するには、標準ライブラリ base64 モジュールの b64decode() 関数を使用します。

ここでは、受信したBase64文字列をデコードし、PNG画像ファイルとして保存する実装方法を解説します。

目次

実装例:受信データの復元と保存

サーバーから受け取ったと仮定したBase64文字列をデコードし、ローカルに restored_image.png という名前で保存するシナリオです。

ソースコード

import base64

# 1. デコード対象のBase64文字列
# (実際にはAPIレスポンスなどで受け取った非常に長い文字列が入ります)
# ここでは例として、短いダミーデータを使用しています
received_b64_str = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="

# 2. Base64文字列をバイナリデータ(bytes)にデコード
# b64decode() は str型 または bytes型 を受け取り、デコード後の bytes型 を返します
decoded_data = base64.b64decode(received_b64_str)

# 3. バイナリ書き込みモード('wb')でファイルを開いて保存
# テキストではないため 'w' ではなく 'wb' (Write Binary) を指定します
output_filename = "restored_image.png"

try:
    with open(output_filename, "wb") as f:
        f.write(decoded_data)
        
    print(f"保存完了: {output_filename}")
    print(f"ファイルサイズ: {len(decoded_data)} bytes")

except Exception as e:
    print(f"保存に失敗しました: {e}")

実行結果

保存完了: restored_image.png
ファイルサイズ: 70 bytes

解説

base64.b64decode(s)

Base64形式の文字列(またはバイト列)を受け取り、元のバイナリデータ(bytes 型)に変換します。 入力文字列に正しくない文字が含まれていたり、パディング(末尾の =)が不足していたりすると binascii.Error が発生することがあります。

ファイルモード wb (Write Binary)

デコードされたデータは画像や音声などのバイナリデータです。 これをファイルに書き込む際は、必ず "wb" モードを指定してください。

  • "w": テキスト書き込みモード(文字コード変換などが起きるため、バイナリデータには不適)
  • "wb": バイナリ書き込みモード(データをそのまま書き込む)
  • ※ユーザー様が提示された "bw" というモード指定はPythonでは無効ですので、"wb" と記述します。

注意点:ヘッダーの除去

Webアプリケーションなどで data:image/png;base64,iVBORw... のような形式(Data URI Scheme)でデータを受け取った場合、先頭の data:image/...;base64, というヘッダー部分はBase64の本体ではないため、デコード前に除去(置換やスライス)する必要があります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次