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

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

我有一些数据正在使用 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 字节数组。有没有办法将它转换成十进制字节数组?

python python-3.x matplotlib png
1个回答
1
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.