ccbunney
ccbunney

Reputation: 2762

PNG options to produce smaller file size when using savefig

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

Answers (2)

daryl
daryl

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

FakeDIY
FakeDIY

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

Related Questions