【问题标题】:Convert Base64 encoded image to a numpy array将 Base64 编码的图像转换为 numpy 数组
【发布时间】:2019-12-10 15:12:37
【问题描述】:

我通过 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 以在写入数组后立即重新读取它感觉非常没用。一定会有更好的办法。我已经尝试了一些最终以一维数组结尾的东西......而我的图像在我的情况下是一个二维数组(BW 图像)。

nparr = np.fromstring(base64.b64decode(test_image), np.uint8)

当 nparr.shape = (694463,) 时会产生 当 image_np.shape = (2048, 3072)

知道我如何向 np.array 表示 Image.frombase64 之类的东西 :) 吗?我知道它不存在,但如果它能够以某种方式解释“文件”而不必先将其保存到磁盘,那就太好了。

【问题讨论】:

  • 看起来您使用的是来自PILImage,对吗?最好提供一个完整的示例,这样人们就可以看到使示例工作所需的内容。请注意,PIL 有一个用于“图像”的 .frombytes() 方法,这就是您可能正在寻找的 pillow.readthedocs.io/en/3.1.x/reference/…
  • 没错。 PIL.Image.frombytes() 对我不起作用。我将在那里添加包含的库。并且您建议的答案有效,谢谢。

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


【解决方案1】:

假设您正在使用 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 是您缺少的关键,我认为。

【讨论】:

  • 这是我使用此代码时遇到的错误UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7ff17ae7aae0>
  • @henrynavarro 您可能应该使用您正在使用的确切代码发布您自己的问题。我刚刚检查过,但只要test_image_base64_encoded 是一个代表base64 编码图像的字符串,这段代码就可以按预期工作,就像你可以在这里制作的那些elmah.io/tools/base64-image-encoder
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 2021-09-15
  • 2018-08-22
相关资源
最近更新 更多