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)