估计图像的最终大小,而无需使用Python将其写入磁盘

时间:2016-03-11 12:33:34

标签: python matplotlib

假设我使用matplotlib生成PNG图像。决定图像大小和DPI(x_size, y_size, dpi_val)的参数由我设定(参见下面的MWE)

有没有办法至少接近图像文件创建后的大小,而不将文件写入磁盘

MWE

import matplotlib.pyplot as plt
import numpy as np

# Figure parameters.
x_size, y_size, dpi_val = 10, 15, 300

x, y = np.random.uniform(0., 10., 100), np.random.uniform(0., 10., 100)
plt.figure(figsize=(x_size, y_size))
plt.scatter(x, y)
plt.savefig('test.png', dpi=dpi_val)

1 个答案:

答案 0 :(得分:3)

您应该能够(未经测试,但从阅读文档)传递类文件对象而不是文件名。这样的对象是一个StringIO对象,你可以在"写"之后检查它的长度。文件。

import StringIO
f = StringIO.StringIO()
plt.savefig(f, ...)
size = len(f.getvalue())

类似文件的对象是与文件具有相同API的任何对象,因此您也可以(再次未经测试)使用write方法定义一个只计算其输入的类。

class Buffer(object):
    def __init__(self):
        self.size = 0
    def write(self, bytes):
        self.size += len(bytes)

f = Buffer()
plt.savefig(f, ...)
size = f.size

(您为Buffer定义的方法取决于savefig实际尝试调用的内容;我省略了我认为未使用的方法。)