我正在将canvas转换为url并使用Flask通过ajax POST请求将其发送到python。我得到正确的URL,甚至打印了它,并且两者都是相同的。但是我不知道如何找回图像。我在互联网上搜索,大多数答案都说要使用解码方法,但是我得到了解码不能在'str'对象上运行的错误。我还尝试将StringIO与Image.open一起使用,这也会产生错误。那么,谁能告诉我该怎么做? 我的JS:
sortedObject
我的python代码:
$SCRIPT_ROOT = {
{
request.script_root | tojson | safe
}
};
$(function() {
$("#pic").bind('click', function() {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
var imgURL = canvas.toDataURL();
$.ajax({
type: "POST",
url: $SCRIPT_ROOT + '/send_pic',
data: {
imageBase64: imgURL
}
}).done(function() {
console.log("sent");
});
});
data_url的值为:
@app.route('/send_pic',methods=['GET','POST'])
def button_pressed():
print("Image recieved")
data_url = request.values['imageBase64']
img = Image.open(StringIO(data_url))
img = np.array(img)
cv2.imshow(img)
cv2.waitKeys(0)
cv2.destroyAllWindows()
return ""
谢谢!
答案 0 :(得分:1)
从您的代码中我了解到,在您的端点中,您需要base64数据。如果是这样,您可以尝试执行以下操作:
href={`..all_rms/rmspage.html?ID=${this.state.selectedPlace.id}`}
修改: 如果您发送的数据不是base64,则可以尝试使用numpy对其进行转换,如下所示:
import base64
from io import BytesIO
@app.route('/send_pic',methods=['GET','POST'])
def button_pressed():
print("Image recieved")
data_url = request.values['imageBase64']
# Decoding base64 string to bytes object
img_bytes = base64.b64decode(data_url)
img = Image.open(BytesIO(img_bytes))
img = np.array(img)
cv2.imshow(img)
cv2.waitKeys(0)
cv2.destroyAllWindows()
return ""
修改2: 根据您提供的值,必须从请求中拆分值才能获得base64图像数据:
from flask import request
...
img_data = np.fromstring(request.data, np.uint8)
# Do what you want with it
cv2.imshow(img)