【Python】 バイナリデータの画像を扱う

Python

Webの画像をhttpのGetで取得するとバイナリデータとして取得します。
取得したデータをPC上に保存しないとバイナリデータとして扱うことになりますが
BytesIOを経由すれば、Pillowなどの画像モジュールを利用して画像を操作できます。

Web上の画像を取得

Web上に存在する画像を読み込んで操作してみます。
サンプルとしてブログやTwitterで使用している顔アイコンの画像を利用します。

Web上の画像の呼び出しにrequests、画像の操作にPillowを使用します。
pipを使用してインストールします。

Web上の画像の呼び出して操作するコードは以下になります。

コードの解説

requests.getメソッドで取得した情報をresponse変数に格納します。

response変数のcontentに取得した画像のバイナリデータが入っているので
BytesIOを経由してPillowで読み込みます。

Pillowで扱える形式になれば、あとはPillowのメソッドを使用して画像を操作します。
ImageOps.flipを使用して画像を反転後、画像を表示します。

上記のコードの例では、顔アイコンの画像を反転した形で表示します。

PC上の画像をバイナリデータとして読み込む

PC上に保存された画像をバイナリデータとして操作する機会はそれほどありませんが
Web画像APIを利用するときに、PC上の画像をバイナリデータとして送付する必要があります。

WebAPIに情報を送付するためにrequests、画像の操作にPillowを使用します。
pipを使用してインストールします。

ローカル上の画像をバイナリデータとして読み込み、WebAPIに送付する
Pythonのコードは以下になります。

コードの解説

requestsで利用するAPIのエンドポイント、ヘッダー情報、パラメータを変数に格納します。

openでrbを引数として読み込むとsample.pngをバイナリデータとして開きます。
readメソッドでバイナリデータを読み込みます。

requests.postでWebAPIにデータを送信して、結果をresponseに格納します。

response変数のcontentに取得した画像のバイナリデータが入っているので
BytesIOを経由してPillowで読み込み保存します。

コメント