記事「FastAPI を使用して numpy 配列を画像として返す方法?」は有益な情報を提供しますが、画像の表示の問題に直接対処するものではありません。これを解決するために、基礎となる技術をさらに詳しく見てみましょう。
この方法では、PIL や OpenCV などのライブラリを使用して画像データをバイトに変換します。結果のバイトは、適切なコンテンツ タイプとヘッダーを持つカスタム レスポンスとして提供できます。
PIL の使用:
<code class="python">from PIL import Image import io @app.get('/image', response_class=Response) def get_image(): im = Image.open('test.png') with io.BytesIO() as buf: im.save(buf, format='PNG') im_bytes = buf.getvalue() headers = {'Content-Disposition': 'inline; filename="test.png"'} return Response(im_bytes, headers=headers, media_type='image/png')</code>
OpenCV の使用:
<code class="python">import cv2 @app.get('/image', response_class=Response) def get_image(): arr = cv2.imread('test.png', cv2.IMREAD_UNCHANGED) success, im = cv2.imencode('.png', arr) headers = {'Content-Disposition': 'inline; filename="test.png"'} return Response(im.tobytes(), headers=headers, media_type='image/png')</code>
このアプローチは画像の表示には推奨されませんが、画像を JSON エンコードされた NumPy 配列に変換するために使用できます。 numpy 配列。後でクライアント側でイメージに変換できます。
PIL の使用:
<code class="python">from PIL import Image import numpy as np @app.get('/image') def get_image(): im = Image.open('test.png') arr = np.asarray(im) return json.dumps(arr.tolist())</code>
OpenCV の使用:
<code class="python">import cv2 @app.get('/image') def get_image(): arr = cv2.imread('test.png', cv2.IMREAD_UNCHANGED) return json.dumps(arr.tolist())</code>
このメソッドを使用して画像を表示するには、受信したバイトまたは JSON でエンコードされたデータをクライアント側で画像形式に変換し直す必要があります。
以上がFastAPI で NumPy 画像配列をレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。