在base64编码后恢复表示图像的numpy数组

Kev*_*n91 3 python arrays base64 numpy

在图像上使用 base64 编码可以将图像完全恢复到其原始形状,包括其所有维度(2D、RGB),而无需直接知道分辨率——它们存储在 base64 信息中

但是,当我有一个表示图像的 numpy 数组时,例如:

test_image = np.random.rand(10,10,3)
Run Code Online (Sandbox Code Playgroud)

然后将其放入 base64 中:

b64_test_image = base64.b64encode(test_image)
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式返回数组的内容:

decoded = base64.b64decode(b64_test_image)
test_image_1D = np.frombuffer(decoded)
Run Code Online (Sandbox Code Playgroud)

然而,与test_image_1D具有维度 的原始图像相比,它只是一维的10x10x3。是否可以在不知道缓冲区大小的情况下恢复原始数组,就像图像一样?

mar*_*lli 5

假设您的数据始终是图像,您需要使用库从 base64 编码字符串中获取图像。例如使用 OpenCV:

retval, buffer = cv2.imencode('.jpg', test_image)
jpg_as_text = base64.b64encode(buffer)
nparr = np.fromstring(base64.b64decode(jpg_as_text), np.uint8)
img2 = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)