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

如何将Matplotlib图形保存为十进制格式的PNG字节数组

Matplotlib生成PNG十进制字节数组解决方案

问题描述

我用Matplotlib可视化数据生成3D体素图形,代码如下:

fig = plt.figure(figsize=(16,16))
ax = fig.add_subplot(projection='3d')
ax.voxels(space, facecolors = rgb_input)
plt.axis('off')
fig.patch.set_alpha(0.25)
ax.patch.set_alpha(0.25)

我希望直接生成十进制格式的PNG字节数组,而不是先存成PNG再转换。尝试以下代码后,得到的是bytes类型数据,看起来像ASCII字节数组,不知道怎么转成十进制数组:

buf = io.BytesIO()
plt.savefig(buf, format = 'png')
buf.seek(0)
data = buf.read()

解决方法

你得到的data本身就是PNG的二进制字节数据,每个字节对应0-255的十进制数值,只是Python打印bytes对象时,会把可打印的ASCII字符显示为字符形式,而非数值。要转换成十进制整数数组,直接用以下两种方式:

方式1:Python内置list转换

import io
import matplotlib.pyplot as plt

# 你的绘图代码...

buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
data = buf.read()

# 转换为十进制整数数组
decimal_byte_array = list(data)
# 此时decimal_byte_array里的每个元素都是0-255的十进制整数

方式2:Numpy生成高效数值数组(适合大数据量)

如果需要处理大规模数据,用Numpy转换更高效:

import numpy as np

# 接上面的data
decimal_byte_array = np.array(data, dtype=np.uint8)
# 得到uint8类型的Numpy数组,每个元素对应十进制字节值

解释:bytes对象本质是不可变的字节序列,每个元素的取值范围就是0-255的整数,list(data)会把每个字节直接转成对应的十进制整数;Numpy方式则生成更紧凑的数值数组,适合后续数值操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:10:02