用zlib+base64压缩numpy数组[python] 。

问题描述 投票:0回答:1

我试图通过python的 requests 模块到flask服务器。

首先,我用zlib压缩了numpy数组,然后用 base64 来对数据进行编码,然后尝试解码和解压,但它没有工作。

import numpy as np 
import base64
import zlib
import requests

frame = np.random.randint(0,255,(5,5,3)) # dummy rgb image
# compress
data = zlib.compress(frame)
print('compressed')
print(data)
print(len(data))
print(type(data))

data = base64.b64encode(frame)
print('b64 encoded')
print(data)
print(len(data))
print(type(data))

data = base64.b64decode(data)
print('b64 decoded')
print(data)
print(len(data))
print(type(data))

data = zlib.decompress(data)
print('b64 decoded')

我得到以下错误。

Traceback (most recent call last):
  File "client.py", line 26, in <module>
    data = zlib.decompress(data)
zlib.error: Error -3 while decompressing data: incorrect header check
python base64 zlib
1个回答
0
投票

data = base64.b64encode(frame) 应该是

b64encode (data)

你不小心编码错了......


0
投票

我刚刚意识到,在考虑到base64编码字符串的额外长度后,我可以完全摆脱它。

所以,下面的代码片段可以满足我的需求,它压缩了 numpy 数组,那么我就可以不用使用 base64. 它摆脱了一些开销。

import numpy as np 
import base64
import zlib
import requests

frame = np.random.randint(0,255,(5,5,3)) # dummy rgb image
# compress
data = zlib.compress(frame)
print('compressed')
print(data)
print(len(data))
print(type(data))


data = zlib.decompress(data)
print('b64 decoded')


data = np.frombuffer(data, dtype=np.uint8)

print(data)
print(type(data))
© www.soinside.com 2019 - 2024. All rights reserved.