【Python】Base64で文字列と画像ファイルをエンコード・デコードする方法

Python

はじめに

今回は、Base64についてPythonで文字列と画像ファイルをそれぞれエンコード、デコードしていきます。

Base64とは

まずBase64とはどういったものなのか概要を確認してみましょう。

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。

電子メールの他にもファイルのアップロードなど、身近に使われている技術なので、実際にエンコード・デコードの方法を学んで理解していきましょう!

【実践】PythonでBaseエンコード・デコード

ここからは実践としてPythonで文字列と画像ファイルをそれぞれエンコード・デコードしてみます。

実行環境

  • Windows11
  • Python:3.11.0

Pythonでは標準ライブラリのbase64があるため、別途ライブラリをインストールする必要はありません。

1. 文字列をBase64でエンコードする

import base64

text = 'おはようございます'
rtext = base64.b64encode(text.encode())
print(rtext)

出力結果↓

b'44GK44Gv44KI44GG44GU44GW44GE44G+44GZ'
b64encode()の引数はbytesのため日本語の文字列をencode()でbytesに変換しています。出力結果としてBase64エンコードされたbytes型が得られました。

2. Base64でエンコードされたバイナリデータをデコードする

今度はbase64でエンコードされたバイナリデータをデコードしてみます。先程のエンコードで得られた結果をデコードします。

import base64

data = b'44GK44Gv44KI44GG44GU44GW44GE44G+44GZ'
rdata = base64.b64decode(data).decode()
print(rdata)

出力結果↓

おはようございます

b64decode()でデコードした戻り値がbytesなので、さらにdecode()でユニコード文字列に変換しています。

3. 画像ファイルをBase64でエンコードする

今度はBase64で画像をエンコード・デコードしてみます。今回使う画像はこちらです。

ダウンロード元:コーヒーをいれる女の子 | maroneいらすと (maroneillust.com)

まずは画像をエンコードして、結果をテキストで保存してみます。

import base64

#対象画像のパス
img_path = r'girlgray-18.png'
#エンコードした画像の保存先
save_path = r'save_encode.txt'
with open(img_path , 'br') as f0:
    encode_data = base64.b64encode(f0.read())
    print(str(encode_data))  
with open(save_path, 'wb') as f1:
    f1.write(encode_data)

上のプログラムを実行すると下の画像のようなテキストファイルが作成されます。

4. Base64でエンコードされた画像をデコードして元に戻す

最後に、Base64エンコードされた画像をでコードして元に戻してみます。
先程保存されたテキストファイルを使用します。

import base64

# 対象テキストファイルのパス
file_path = r'save_encode.txt'
#画像の保存先
save_img_path = r'save_decode.png'
with open(file_path , 'r') as f2:
    decode_data = f2.read()
    print(decode_data)

save_img = base64.b64decode(decode_data.encode())
with open(save_img_path , 'bw') as f3:
    f3.write(save_img)

実行するとコーヒーを淹れている女の子の画像ファイルがsave_decode.pngというファイル名で保存されます。

 

これで画像をBase64形式に変換することと、Base64形式を画像ファイルに変換することができました!

 

まとめ

Pythonでは標準のbase64ライブラリを使用することでbase64エンコードとデコードができました。
今回実践してみた文字列や画像の他にも、PDFや電子署名なども変換できるので活用してみてください!

 

タイトルとURLをコピーしました