发送图片(作为numpy数组)'requests.post'

时间:2018-10-20 17:05:20

标签: python numpy python-requests

我对一个非常简单的事情感到困惑:我正在使用在线服务进行图像处理并发送我正在使用的图像

var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)

其中image_data应该被编码为二进制字符串。例如,下面的示例正常工作:

image_data = open(image_path, "rb").read()
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)

但是,在某些情况下,我需要在图像已经打开并且为numpy.array格式时发送图像。

我应该如何转换我的图像以使其能够通过请求发送?

1 个答案:

答案 0 :(得分:1)

在提供的链接上注明“支持的输入图像格式包括JPEG,PNG,GIF(第一帧),BMP。”因此,您的数据必须采用这些格式之一。 numpy数组不适合。需要将其转换为PNG图片。

使用matplotlib.pyplot.imsave()函数最容易做到这一点。但是,结果应保存到内存缓冲区(发送到API),而不是文件。在Python中处理此问题的方法是使用io.BytesIO()对象。

总而言之,解决问题的方法是

import io
import numpy as np
import matplotlib.pyplot as plt

buf = io.BytesIO()
plt.imsave(buf, image_np, format='png')
image_data = buf.getvalue()
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)

其中image_np是作为numpy数组的图像。

还请注意,image_data = buf.getvalue()行不是必需的。相反,缓冲区内容可以直接在API调用中使用。