How to return image stream and text as JSON response from Python Flask API

最后都变了- 提交于 2021-01-22 07:56:18

问题


From a Python Flask API, I want to return an image stream and also some text in a single API response.

something like this. { 'Status' : 'Success', 'message': message, 'ImageBytes': imageBytes }

Also would like to know what would be the best format to use for imageBytes, so that the client applications (Java / JQuery) can parse and reconstruct the image.

If the above approach is not correct, please suggest a better approach.

Thanks in Advance for your help!


回答1:


The following worked for me:

import io
from base64 import encodebytes
from PIL import Image
# from flask import jsonify

def get_response_image(image_path):
    pil_img = Image.open(image_path, mode='r') # reads the PIL image
    byte_arr = io.BytesIO()
    pil_img.save(byte_arr, format='PNG') # convert the PIL image to byte array
    encoded_img = encodebytes(byte_arr.getvalue()).decode('ascii') # encode as base64
    return encoded_img

# server side code
image_path = 'images/test.png' # point to your image location
encoded_img = get_response_image(image_path)
my_message = 'here is my message' # create your message as per your need
response =  { 'Status' : 'Success', 'message': my_message , 'ImageBytes': encoded_img}
# return jsonify(response) # send the result to client



回答2:


I used the following utility function to convert the image into ByteArry and returned as one of the parameter in my JSON output.

def getImageBytes(filePath):
img = Image.open(filePath, mode='r')
imgByteArr = io.BytesIO()
imgByteArr = imgByteArr.getvalue()
imgByteArr = base64.encodebytes(imgByteArr).decode('ascii')

return imgByteArr


来源:https://stackoverflow.com/questions/57346338/how-to-return-image-stream-and-text-as-json-response-from-python-flask-api

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!