使用Matplotlib savefig生成图像时尺寸不符合预期,且需保留透明效果的问题求助
使用Matplotlib savefig生成图像时尺寸不符合预期,且需保留透明效果的问题求助
大家好,我遇到了一个Matplotlib结合PIL处理图像时的问题,想向各位请教:
我用Matplotlib的savefig函数从图表生成图像,之后会用PIL对图像做进一步修改,同时希望完全移除所有内边距。但目前的问题是,最终生成的图像尺寸总是比预期的要小。举个例子:
- 设置尺寸为
(8, 10) - DPI设为300
按照计算,预期宽度应该是300*8=2400,但实际得到的宽度却是2310。
我试过添加plt.tight_layout(),效果比之前有所改善,但尺寸还是达不到预期值。我推测这是因为调用savefig之前,默认的pad_inches值是0.1,导致还有残留的内边距。
请问有没有办法让我得到尺寸完全符合预期的图像呢?
以下是我的代码示例:
from PIL import Image import matplotlib.pyplot as plt import io SIZE_X = 8 SIZE_Y = 10 IMAGE_DPI = 300 fig, ax = plt.subplots(figsize=(SIZE_X, SIZE_Y), dpi=IMAGE_DPI) ax.set_axis_off() ax.plot([1, 2, 3, 4]) buffer = io.BytesIO() plt.tight_layout() plt.savefig(buffer, dpi=IMAGE_DPI, ax=ax, format='png', bbox_inches='tight', pad_inches=0, transparent=True) buffer.seek(0) image = Image.open(buffer) print('Expected: ', (SIZE_X * IMAGE_DPI, SIZE_Y * IMAGE_DPI)) print('Figure size: ', (fig.get_figwidth() * fig.get_dpi(), fig.get_figheight() * fig.get_dpi())) print('Image Size: ', image.size) plt.close(fig) del fig del buffer
运行后的输出:
Expected: (2400, 3000)
Figure size: (2400.0, 3000.0)
Image Size: (2310, 2910)
另外补充一点:我试过下面这段代码能得到正确的图像尺寸,但没法实现透明效果:
image = Image.frombytes("RGBA", fig.canvas.get_width_height(), bytes(fig.canvas.get_renderer().buffer_rgba()))
备注:内容来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

