如何使用matplotlib保存bmp格式而不保存到png图像?

mpgws1up  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(239)

下面是运行良好的代码:

TempImage = "image.png"
SaveImage = "image.bmp"
plt.savefig(TempImage, format = "png")
img = Image.open(TempImage)
img.save(SaveImage)
os.remove(TempImage)

我正在寻找一个选项来保存matplotlib绘图到图像,但需要bmp格式。因为没有解决方案,所以我找到了这个。但它创建了额外的png文件达特我必须删除,因为它对我没有用,可能会获得磁盘空间。
所以我在寻找一个解决方案,将避免保存png文件,并直接将绘图转换为bmp文件格式。
请让我知道我能做些什么来实现它。

czq61nw1

czq61nw11#

如果你真的想避免使用PNG,你可以使用原始的RGBA缓冲区,这样做的优点是比使用PNG文件要快一些。
它稍微复杂一些,但下面的内容对我很有效:

import matplotlib.pyplot as plt
from io import BytesIO
from PIL import Image

def fig_to_image(figure: plt.Figure, *, dpi=None, **kwds) -> Image:
    if dpi is None:
        dpi = figure.dpi
    dims = tuple(int(n * dpi) for n in figure.get_size_inches())
    buf = BytesIO()
    figure.savefig(buf, format='RGBA', dpi=dpi, **kwds)
    return Image.frombuffer('RGBA', dims, buf.getbuffer())

fig, ax = plt.subplots()

fig_to_image(fig).save('figure.bmp')

我需要注意的是,因为BMP文件没有经过压缩,所以生成的文件非常大。所以即使生成了中间的PNG,也不太可能对磁盘的使用产生很大的影响。例如,上面的代码生成了1,228,854字节的BMP和7,927字节的PNG,所以PNG占用了0.6%的存储空间。

相关问题