Python 将PIL.Image发送到django服务器端并取回
我不知道将映像从客户端发送到服务器端的背后是什么,所以我被下面的场景卡住了 我想使用将Python 将PIL.Image发送到django服务器端并取回,python,django,python-3.x,python-imaging-library,Python,Django,Python 3.x,Python Imaging Library,我不知道将映像从客户端发送到服务器端的背后是什么,所以我被下面的场景卡住了 我想使用将PIL.Image对象发送到django服务器端,然后将其取回,以便使用服务器端的PIL.Image对象。 正如我已经测试过的,如果在没有任何转换的情况下发送PIL.Image对象,即 r = requests.post(SERVER_URL, data={ 'image': PILimage,#PILimage is of type PI
PIL.Image
对象发送到django服务器端,然后将其取回,以便使用服务器端的PIL.Image
对象。
正如我已经测试过的,如果在没有任何转换的情况下发送PIL.Image
对象,即
r = requests.post(SERVER_URL,
data={
'image': PILimage,#PILimage is of type PIL.Image
'wordPos':(86,23)
},
)
r = requests.post(SERVER_URL,
data={
'image': PILimage.tobytes(),#PILimage is of type PIL.Image
'wordPos':(86,23)
},
)
然后我在服务器端得到了一个值为
的str
对象,我猜这是由请求引起的,它在发送之前将PIL.Image
对象转换为str
对象,所以为什么请求
进行转换?为什么我们不能在没有任何转换的情况下通过互联网发送PIL.Image
对象?请在这里解释一下,谢谢强>
有人告诉我,我可以将PIL.Image
对象转换为字节
形式,然后进行发送,也就是说
r = requests.post(SERVER_URL,
data={
'image': PILimage,#PILimage is of type PIL.Image
'wordPos':(86,23)
},
)
r = requests.post(SERVER_URL,
data={
'image': PILimage.tobytes(),#PILimage is of type PIL.Image
'wordPos':(86,23)
},
)
但是如何将图像返回到服务器端的PIL.image
对象?似乎没有帮助。任何经过连接的东西都必须是一个字节序列,以及解释这些字节的方法(如果协议没有强制执行某些特定含义)。用HTTP的说法,这意味着您必须添加一个内容类型头,声明对发送的字节的解释
你可以:
>>> import io
>>> file_like_object = io.BytesIO()
>>> PILImage.save(file_like_object, format='png')
然后,您的POST请求应该有一个标题内容类型:image/png
,并将file\u like\u object.getvalue()
作为请求主体发送。用于发送图像
def myOCR(PILimage, wordPos):
image = io.BytesIO()
PILimage.save(image, 'png') # 没有什么类型,这里就任意指定个吧;For images created by the library itself (via a factory function, or by running a method on an existing image), this attribute is set to None.
image.seek(0) # 要回到开始才行,不然后面requests读的时候会从结尾读,读不到数据
r = requests.post(SERVER_URL,
files={'image': image},
data={'wordPos': wordPos}
)
result = r.json()
return result['word']
在Django端,可以使用image.open(request.FILES['image'])获取图像。
为什么“任何经过电线的东西都必须是字节序列”?我想进一步解释一下,我对计算机网络了解不多。这是一个非常基本的问题,我不能在这里详细阐述。我建议你从起点开始,继续读下去……谢谢,我终于解决了