概要
画像の送受信処理についての日本語の処理が少なかったので、まとめる。
サンプルコード
ここでは、画像のエコーバックのサンプルコードを示します。
送信/受信
@app.route("/echo_back", methods=['POST'])
def test():
img_bin = io.BytesIO(request.data).getvalue() # 受信
response = make_response(img_bin) # レスポンスに画像を設定
response.headers.set('Content-Type', request.content_type) # ヘッダ設定
return response
ポイントを以下に示します。
- 「request.data」の中に画像情報が格納されています。これをio.ByteIO型とすると、画像情報のみ取得できます。今回はエコーバックさせるので、getvalue()を用いてすぐにbytes型に変換しています。
- make_response()に画像情報を格納するとき、bytes型でないといけないようです。そのため、上記のようにgetvalue()にてbytes型としています。
- 最後に、headerに「Content-type」を設定しています。
途中に画像処理をする場合は適宜型を変換します。opencvであればnumpy配列でしょうかね。PILの場合はImage.open(io.BytesIO(request.data))みたいにすると良いんですかね。
テスト方法
自分は「POST MAN」を使用しています。ここでは、「POST MAN」を利用した場合の設定について説明します。
- 通信は「POST」(今回はPOSTのみ許可しているので)
- Headerに「Content-Type」を追加し、画像ファイルのファイルフォーマットに合わせて「Value」を設定
- Bodyを「binary」に設定し、画像ファイルを選択
基本的には以上の設定としてください。これにより、送信したファイルがそのまま返信されることを確認できます。