而文章「如何使用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 數組,稍後可以在客戶端轉換回圖像。
使用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中文網其他相關文章!