paletted PNG backend

Hi Matplotlib users,

We are using Matplotlib for a web service which makes PNG images on the fly for presentation on a map (web site using the web service is here: https://ifm-beta.fcoo.dk)

Performance and image size are two major concerns for us. We therefore save the resulting RGBA PNG to a buffer and afterwards use Pillow (PIL) to convert it to a P PNG (paletted PNG) to reduce the image size dramatically.

This procedure does however use a significant amount of our total processing time per image. I would therefore be interested in extending e.g. the AGG backend to produce paletted PNGs directly. I am of course aware that this might not be useful for many others since one would have to provide some extra information when rendering with this backend (possibly output palette and quantizing method). But on the other hand it might be useful for others doing web services using matplotlib.

My questions are:

  1. Is it possible to extend the AGG backend for this and how?

  2. Is it better to make a separate Pillow based backend for this (Pillow is probably not as fast as AGG)?

Best regards,

Jesper