使用savefig时,PNG选项可生成较小的文件大小

ccb*_*ney 7 python matplotlib

我使用matplotlib生成一个绘图,然后使用matplotlib.pyplot.savefig保存到PNG文件.

一切正常,但文件大小非常大(约120Kb).

之后我可以使用ImageMagik(通过shell)通过减少颜色数量和关闭抖动来将文件大小减少到38Kb而不会降低质量:

convert +dither -colors 256 orig.png new.png
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以在matplotlib中这样做吗?我搜索了文档,找不到任何与设置保存时使用的颜色数等有关的事情....

谢谢!

dar*_*ryl 8

这就是我通过PIL(现在Pillow)运行matplotlib图像的方法

import cStringIO
import matplotlib.pyplot as plt
from PIL import Image
Run Code Online (Sandbox Code Playgroud)

...

ram = cStringIO.StringIO()
plt.savefig(ram, format='png')
ram.seek(0)
im = Image.open(ram)
im2 = im.convert('RGB').convert('P', palette=Image.ADAPTIVE)
im2.save( filename , format='PNG')
Run Code Online (Sandbox Code Playgroud)

  • 这真的很有帮助!对于Python 3,我使用io.BytesIO而不是cStringIO.StringIO。参见[python3中的StringIO](http://stackoverflow.com/questions/11914472/stringio-in-python3) (3认同)

Fak*_*DIY 4

您可以将dpi=kwarg 传递给 savefig() ,这可能会帮助您减少文件大小(取决于您之后想要对图表执行的操作)。如果做不到这一点,我认为 Python 成像库 ( http://www.pythonware.com/products/pil/ ) 几乎肯定能满足您的要求。