【发布时间】: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 之类的东西 :) 吗?我知道它不存在,但如果它能够以某种方式解释“文件”而不必先将其保存到磁盘,那就太好了。
【问题讨论】:
-
看起来您使用的是来自
PIL的Image,对吗?最好提供一个完整的示例,这样人们就可以看到使示例工作所需的内容。请注意,PIL 有一个用于“图像”的.frombytes()方法,这就是您可能正在寻找的 pillow.readthedocs.io/en/3.1.x/reference/… -
没错。 PIL.Image.frombytes() 对我不起作用。我将在那里添加包含的库。并且您建议的答案有效,谢谢。
标签: python image numpy base64 python-imaging-library