0

I have an ajax post posting and image like so,

// 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!');
    }
});

In flask I have this,

@app.route("/api", methods=["POST"])
def Run():
    data = np.fromstring(request.data, dtype=np.uint8)
    im_gray = cv2.imdecode(data,cv2.IMREAD_GRAYSCALE)

I receive a base64 encoded image with request.data like so,

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAHBAyADASIAAhEBAxEB/8QAHgAAAAYDAQEAAAAAAAAAAAAAAAECAwQFBgcICQr/xABXEAABAgQEAgYGBwYDBQUGBAcBAgMABAURBgcSITFBCBMiUWFxCRQVMoGRIzNCUmJyoRYkgrHB0UNTkhclNERjZHODouEmVHSEk7IYJ0VVNTdGZcLw8f/EABsBAAMBAQEBAQAAAAAAAAAAAAABAgMEBQYH/8QANhEAAgECBQMDAwMDAw ............

However my img_gray is None always. What am I doing wrong?

Pavan K
  • 4,085
  • 8
  • 41
  • 72

2 Answers2

0

Convert base64 to an image. Please check following code.

f = open("imageFile.png", "wb") f.write(data.decode('base64')) f.close()

Arshid KV
  • 9,631
  • 3
  • 35
  • 36
0

The answer here worked.

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)
Pavan K
  • 4,085
  • 8
  • 41
  • 72