【Python】バイナリ形式の画像ファイルを扱う方法【base64】

アイキャッチ画像
  • Pythonでバイナリ形式の画像ファイルを扱うには?
  • バイナリ形式の画像ファイルを.jpg等で保存するには?
  • base64とは?

本記事ではこのような疑問を解決します。


先日、業務の中でバイナリ形式の画像ファイルを扱う場面がありました。

具体的には、APIを叩いてバイナリ形式の画像ファイルをサーバーに送り、.jpgで保存するというものです。

また、上記で保存した画像ファイルを呼び出してバイナリ形式の画像ファイルをレスポンスで返すというAPIも作りました。


そこで今回はPythonでバイナリ形式の画像ファイルを扱う方法を解説します。

なお、本記事ではOpenCV等の外部ライブラリではなく、標準ライブラリのみを使用します!

あわせて読みたい

エンジニアが副業を始めるには?エンジニアの副業にはどんな種類がある? 本記事ではこのような疑問を解決します。副業がブームになっている昨今、エンジニアほど副業をやりやすい職業はないでしょう。副業に関心があったり、副業をしてみたいと思っ[…]

アイキャッチ画像

画像ファイルをバイナリ形式に変換する

まずは画像ファイルをバイナリ形式に変換してみましょう。


今回はこちらの画像を扱っていきます。

Git
格納先:/Users/kosuke/before/Git.jpg
# 扱う画像ファイルを取得する
image_file_path = '/Users/kosuke/before/Git.jpg'

# 取得した画像ファイルをバイナリ形式で読み込む
with open(image_file_path, mode='rb') as f:
    image_file = f.read()

# バイナリ変換した画像ファイルをターミナルに表示してみる
print(image_file)

$ python convert_image.py
実行結果:
b’\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xe2\x02\x1cICC_PROFILE\x00\x01\x01\x00\x00\x02\x0clcms\x02・・・途中省略・・・\xd0\xb8\xfc\x8f\x1c\x8c~Y\x8e\x836\xdf\xf2\xac\xeaZ\xb1\xa3\x1a\xb1\xcd\xdb\xad\xff\xd9′

なお、APIで画像ファイルを送受信する際にはbase64エンコードされた状態でjsonにセットするのが一般的です。

そのため、ここではbase64ライブラリを使用してみます。

base64はデータのエンコード・デコードを行うPythonの標準ライブラリです。

import base64


image_file_path = '/Users/kosuke/before/Git.jpg'

with open(image_file_path, mode='rb') as f:
    image_file = f.read()

# base64エンコードする
binary_file_b64 = base64.b64encode(image_file)

# base64エンコードしたバイナリデータをターミナルに表示してみる
print(binary_file_b64)

$ python convert_image.py
実行結果:
b’/9j/4AAQSkZJRgABAQEASABIAAD/4gIcSUNDX1BST0ZJTEUA・・・途中省略・・・ol+Jdfjkq7nQhoXMX9NOOjf9C4vjqHd2x+VZ/oJCEKzH/QuPyPHIx+WY6DNt/yrOpasaMasc3brf/Z’

あわせて読みたい

フリーランスエンジニアが案件獲得方法とは?自ら営業せずに案件を獲得するには?実務経験1年未満でも大丈夫なの? 本記事ではこのような疑問を解決します。これからフリーランスエンジニアとして独立したい方は、兎にも角にも案件の獲得が急務です[…]

アイキャッチ画像

バイナリ形式の画像ファイルを.jpg等で保存する

次に先ほどバイナリ形式に変換した画像ファイルをローカルPCに.jpg等で保存してみましょう。

import base64


# ※先ほど扱ったbinary_file_b64を使用する

# base64デコードする
image_file = base64.b64decode(binary_file_b64)

# 保存する画像ファイルのパスを指定する
save_image_file_path = '/Users/kosuke/after/before/Git_Clone.jpg'

# jpgファイルにバイナリデータを書き込む
with open(save_image_file_path, mode='wb') as f:
    f.write(image_file)

上記スクリプトを実行すると以下のように画像が保存できているのが確認できます。

Pythonでバイナリ形式の画像ファイルを保存する

まとめ

以上がPythonでバイナリ形式の画像ファイルを扱う方法になります。

Webアプリケーション開発をしていると画像ファイルをバイナリ形式で扱う場面は多いのではないでしょうか。

例えば、画像のアップロード・ダウンロード機能など。

OpenCV等の外部ライブラリを入れずになるべく標準ライブラリで実装したい方はぜひ業務に本記事を活用してみてください!