Reputation: 2762
I am using matplotlib to produce a plot which I then save to a PNG file using matplotlib.pyplot.savefig.
It all works fine, but the filesize is quite large (about 120Kb).
I can use ImageMagik afterwards (via the shell) to reduce the filesize to 38Kb without any loss of quality by reducing the number of colors and turning off dither:
convert +dither -colors 256 orig.png new.png
My question is: can I do this within matplotlib? I have searched the documentation and can't find any thing pertaining to setting the number of colors used when saving, etc....
Thanks!
Upvotes: 9
Views: 5523
Reputation: 1200
This is what I do to run matplotlib image through PIL (now Pillow)
import cStringIO
import matplotlib.pyplot as plt
from PIL import Image
...
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')
Upvotes: 13
Reputation: 1445
You can pass a dpi=
kwarg to savefig() which might help you reduce the filesize (depending on what you want to do with your graphs afterwards). Failing that, I think that the Python Imaging Library ( http://www.pythonware.com/products/pil/ ) will almost certainly do what you want.
Upvotes: 4