matplotlib 如何将图形保存为PNG字节数组

smdncfj3  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(202)

我用MatPlotLib图可视化了一些数据。我希望能够将数字转换为一个字节数组,是与PNG十进制值格式化。https://www.w3.org/TR/PNG-Structure.html

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十进制值:

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

编辑:经过进一步的研究,我发现data值被格式化为ASCII字节数组。有没有办法把它转换成十进制字节数组?

gcuhipw9

gcuhipw91#

PNG图像是二进制文件,通常用ASCII或十六进制表示,要将字节数组转换为十进制表示,您可以简单地使用Python的内置函数来完成。

import io
import matplotlib.pyplot as plt
import numpy as np

space = np.random.rand(5,5,5) > 0.5
rgb_input = np.random.rand(5,5,5,3)

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)

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

decimal_values = [byte for byte in data]
print(decimal_values)

相关问题