python 烧瓶未读取来自 ajax POST 的图像
python flask not reading image from ajax POST
我有一个 ajax post posting 和像这样的图像,
// fileData is canvas.toDataURL(fileType);
$.ajax({
type: 'POST',
url: 'http://ip/api',
data: fileData,
contentType: false,
processData: false,
mimeType:"multipart/form-data",
success: function (data) {
if (data.success) {
alert('Your file was successfully uploaded!');
} else {
alert('There was an error uploading your file!');
}
},
error: function (data) {
alert('There was an error uploading your file!');
}
});
烧瓶里有这个,
@app.route("/api", methods=["POST"])
def Run():
data = np.fromstring(request.data, dtype=np.uint8)
im_gray = cv2.imdecode(data,cv2.IMREAD_GRAYSCALE)
我收到一个带有 request.data 的 base64 编码图像,就像这样,
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHBAyADASIAAhEBAxEB/8QAHgAAAAYDAQEAAAAAAAAAAAAAAAECAwQFBgcICQr/xABXEAABAgQEAgYGBwYDBQUGBAcBAgMABAURBgcSITFBCBMiUWFxCRQVMoGRIzNCUmJyoRYkgrHB0UNTkhclNERjZHODouEmVHSEk7IYJ0VVNTdGZcLw8f/EABsBAAMBAQEBAQAAAAAAAAAAAAABAgMEBQYH/8QANhEAAgECBQMDAwMDAw ............
但是我的 img_gray 一直是 None。我究竟做错了什么?
将 base64
转换为图像。请检查以下代码。
f = open("imageFile.png", "wb")
f.write(data.decode('base64'))
f.close()
答案有效。
import cv2
import numpy as np
def data_uri_to_cv2_img(uri):
encoded_data = uri.split(',')[1]
nparr = np.fromstring(encoded_data.decode('base64'), np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
return img
data_uri = "data:image/jpeg;base64,/9j/4AAQ..."
img = data_uri_to_cv2_img(data_uri)
cv2.imshow(img)
我有一个 ajax post posting 和像这样的图像,
// fileData is canvas.toDataURL(fileType);
$.ajax({
type: 'POST',
url: 'http://ip/api',
data: fileData,
contentType: false,
processData: false,
mimeType:"multipart/form-data",
success: function (data) {
if (data.success) {
alert('Your file was successfully uploaded!');
} else {
alert('There was an error uploading your file!');
}
},
error: function (data) {
alert('There was an error uploading your file!');
}
});
烧瓶里有这个,
@app.route("/api", methods=["POST"])
def Run():
data = np.fromstring(request.data, dtype=np.uint8)
im_gray = cv2.imdecode(data,cv2.IMREAD_GRAYSCALE)
我收到一个带有 request.data 的 base64 编码图像,就像这样,
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHBAyADASIAAhEBAxEB/8QAHgAAAAYDAQEAAAAAAAAAAAAAAAECAwQFBgcICQr/xABXEAABAgQEAgYGBwYDBQUGBAcBAgMABAURBgcSITFBCBMiUWFxCRQVMoGRIzNCUmJyoRYkgrHB0UNTkhclNERjZHODouEmVHSEk7IYJ0VVNTdGZcLw8f/EABsBAAMBAQEBAQAAAAAAAAAAAAABAgMEBQYH/8QANhEAAgECBQMDAwMDAw ............
但是我的 img_gray 一直是 None。我究竟做错了什么?
将 base64
转换为图像。请检查以下代码。
f = open("imageFile.png", "wb")
f.write(data.decode('base64'))
f.close()
答案
import cv2
import numpy as np
def data_uri_to_cv2_img(uri):
encoded_data = uri.split(',')[1]
nparr = np.fromstring(encoded_data.decode('base64'), np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
return img
data_uri = "data:image/jpeg;base64,/9j/4AAQ..."
img = data_uri_to_cv2_img(data_uri)
cv2.imshow(img)