将Base64编码的图像转换为numpy数组

时间:2019-08-02 01:36:06

标签: python image numpy base64 python-imaging-library

我正在通过base64编码的http POST接收图像。它可以是JPG或BMP。现在,我有了图像,可以将其保存在内存中。我发现了如何将其写入磁盘并将其重新读取为numpy数组(实际上我需要将其放入torch.tensor中,但numpy现在就足够了。)

这是对我有用的东西,但是效率很低:

import torch
import numpy as np
from PIL import Image
import base64

base64_decoded = base64.b64decode(test_image_base64_encoded)

with open("out.jpg", "wb") as out_file:
    out_file.write(base64_decoded)

image = Image.open("out.jpg")
image_np = np.array(image)
image_torch = torch.tensor(np.array(image))

将数组写入out.jpg以便在数组之后立即重读它感觉非常无用。肯定有更好的办法。我尝试了一些以1D数组结尾的事情...而我的图像在我的情况下是2D数组(BW图像)。

nparr = np.fromstring(base64.b64decode(test_image), np.uint8)
当nparr.shape =(694463,)时将产生

当image_np.shape =(2048,3072)

任何想法我怎么能代表np.array像Image.frombase64 :)吗?我知道说的话并不存在,但是如果它能够以某种方式解释“文件”而不必先将其保存到磁盘上,那就太好了。

1 个答案:

答案 0 :(得分:3)

假设您正在使用PIL,但您不知道图像类型或尺寸:

from PIL import Image
import base64
import io
import numpy as np
import torch

base64_decoded = base64.b64decode(test_image_base64_encoded)

image = Image.open(io.BytesIO(base64_decoded))
image_np = np.array(image)
image_torch = torch.tensor(np.array(image))
我认为

io.BytesIO是您所缺少的关键内容。