python - 如何将 Python numpy 数组转换为 base64 输出

标签 python arrays base64

我基本上需要做 this但在 Python 而不是 Javascript 中。我从 socketio 连接接收到一个 base64 编码的字符串,将其转换为 uint8 并对其进行处理,然后需要将其转换为 base64 字符串以便我可以将其发回。

到目前为止,我已经得到了这个(我正在从 socketio 服务器获取 data 字典):

import pickle
import base64
from io import BytesIO
from PIL import Image

base64_image_string = data["image"]
image = Image.open(BytesIO(base64.b64decode(base64_image_string)))
img = np.array(image)

如何反转此过程以从 img 返回到 base64_image_string

更新:
我已经通过以下方式解决了这个问题(从上面的代码片段继续):

pil_img = Image.fromarray(img)
buff = BytesIO()
pil_img.save(buff, format="JPEG")
new_image_string = base64.b64encode(buff.getvalue()).decode("utf-8")

有点令人困惑的是,new_image_stringbase64_image_string 不同,但从 new_image_string 渲染的图像看起来一样,所以我很满意!

最佳答案

我相信因为 numpy.array 支持缓冲协议(protocol),你只需要以下内容:

processed_string = base64.b64encode(img)

所以,例如:

>>> encoded = b"aGVsbG8sIHdvcmxk"
>>> img = np.frombuffer(base64.b64decode(encoded), np.uint8)
>>> img
array([104, 101, 108, 108, 111,  44,  32, 119, 111, 114, 108, 100], dtype=uint8)
>>> img.tobytes()
b'hello, world'
>>> base64.b64encode(img)
b'aGVsbG8sIHdvcmxk'
>>>

关于python - 如何将 Python numpy 数组转换为 base64 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43310681/

相关文章:

python - 根据数据框中的位置计算元素

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

python - 自定义 Base64 编码器无法正确编码

python - 通过 tcp python 发送字节

python - 迭代两个 numpy 数组返回一维数组

arrays - 快速排序分区 Python

android - 发送 base64 编码的图像会导致图像损坏

java - 获取base64解码数据的长度

python - 我怀疑 re.match 弄乱了控制流

Javascript函数参数作为数组