[OSM-dev] PNG type for Mapnik map

Jochen Topf jochen at remote.org
Thu Dec 20 18:07:49 GMT 2007


On Wed, Dec 19, 2007 at 10:36:06PM +0000, Jon Burgess wrote:
> On Wed, 2007-12-19 at 12:49 +0000, Tom Hughes wrote:
> > > Jochen Topf wrote:
> > >
> > >> http://svn.openstreetmap.org/applications/rendering/mapnik/generate_tiles.py
> > >> uses a call to the external 'convert' program to reduce the number of colors
> > >> for tiles rendered by Mapnik to 255. Since version r571 Mapnik supports
> > >> writing to 8 bit palette PNGs. Palette PNGs are generally smaller than
> > >> normal PNGs.
> > >> 
> > >> Is there any reason NOT to change the code to use Mapniks function to
> > >> write out the image directly as 8bit paletted PNG, make the images
> > >> smaller and save the call to 'convert'? (If nobody comes up with a
> > >> reason, I'll change the code.)
> > >
> > > AFAIK, the main reason the feature was added to mapnik was that /we/
> > > needed it because the external convert was really slow (about the same
> > > amount of time as the whole rest of the render).
> > 
> > The generate_tiles.py script is only an example - whilst changing it
> > is probably a good idea I don't think it will have an affect on
> > anything very much.
> 
> Artem mentioned that the colour reduction technique is still fairly
> experimental. It would be great for people to try it in order to iron
> out any kinks before we adopt it on the main site.

I tried it out and the png256 stuff in Mapnik doesn't do the right
thing. You'll end up with tiles not fitting together because the colors
as slightly off. The change is large enough to see in some places.

Imagemagick convert seems to better with this. The algorithm it uses is
described on http://www.imagemagick.org/script/quantize.php . But I
could imagine that there are pathological cases where it also breaks.

I haven't looked into the algorithm that Mapnik uses, but maybe it can
be improved by making sure that all colors mentioned in the Map file,
i.e. all colors that we explicitly asked for, are retained. That way
only the "artificial" colors created by the antialiasing will be changed.
This should make sure that tiles will always fit together because all
the larger colored areas will use the same colors.

Jochen
-- 
Jochen Topf  jochen at remote.org  http://www.remote.org/jochen/  +49-721-388298





More information about the dev mailing list