You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

wctZLib压缩波形图像的Python解压缩与显示问题求助

解决思路与步骤

核心问题:你解压后得到的并非PNG/JPG这类标准图像文件,而是原始波形采样数值数据,因此无法用PIL直接打开。结合wctZLib这个自定义压缩标识,按以下步骤处理:

1. 确保wctZLib解压正确

标准zlib解压可能需要调整参数适配自定义压缩逻辑,尝试以下几种解压方式:

import zlib
import json

with open('wave.json','r') as f:
    data = json.load(f)
    bytes_data = bytearray.fromhex(data['waveform_data'][2:])
    
    # 尝试多种zlib解压参数,覆盖不同压缩变种
    try:
        # 标准带zlib头的压缩
        decompressed = zlib.decompress(bytes_data)
    except zlib.error:
        try:
            # 原始deflate格式(无zlib头)
            decompressed = zlib.decompress(bytes_data, wbits=-15)
        except zlib.error:
            # 尝试兼容gzip格式
            decompressed = zlib.decompress(bytes_data, wbits=16+zlib.MAX_WBITS)
    
    print(f"解压后字节长度: {len(decompressed)}")

2. 解析波形数值

波形数据通常是连续的采样数值(如16位整数),用numpy解析成可处理的数组:

import numpy as np

# 根据设备实际采样格式调整dtype,比如uint16、int32等
wave_array = np.frombuffer(decompressed, dtype=np.int16)
print(f"采样点数: {len(wave_array)}")
print(f"数值范围: {wave_array.min()} ~ {wave_array.max()}")

如果输出的数值范围符合设备预期(比如传感器的常规输出区间),说明解析正确。

3. 绘制波形图像

用matplotlib将数值绘制成波形图,替代直接用PIL打开的方式:

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
plt.plot(wave_array)
plt.title(f"Waveform: {data['start_dt']} - {data['end_dt']}")
plt.xlabel("Sample Index")
plt.ylabel("Amplitude")
plt.show()

# 如需保存为图像文件
plt.savefig("waveform_output.png")

额外排查点

  • 检查解压后的数据头部是否有元数据(如采样率、通道数),这类自定义压缩可能会附加额外信息,需要先剥离再解析数值;
  • 对比数据库中多组数据的解压结果,找出字节结构的共性规律。

内容的提问来源于stack exchange,提问作者Dest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:55