假设我使用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)
答案 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
实际尝试调用的内容;我省略了我认为未使用的方法。)