【问题标题】:compressing numpy array with zlib + base64 [python]使用 zlib + base64 [python] 压缩 numpy 数组
【发布时间】:2020-05-27 19:13:32
【问题描述】:

我正在尝试通过 python requests 模块将一个 numpy 数组发送到烧瓶服务器。

首先,我用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】:

    data = base64.b64encode(frame) 应该是

    b64encode (data)

    你不小心编码错了……

    【讨论】:

      【解决方案2】:

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

      所以,下面的代码 sn-p 做了我需要的,它压缩了 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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多