Color shifts using QUANTIZE_COLORS=256

Stephen Woodbridge woodbri at SWOODBRIDGE.COM
Wed Aug 9 10:56:53 PDT 2006


Hi all,

Sorry for the cross-post, but this seems valid for both groups.

I have mapserver configured to work with ka-map and things are working
fine except we have noticed color shifts in tiles. We are using:

   OUTPUTFORMAT
     NAME PNG8
     DRIVER "GD/PNG"
     EXTENSION "png"
     MIMETYPE "image/png"
     IMAGEMODE RGBA
     TRANSPARENT OFF
     FORMATOPTION "QUANTIZE_FORCE=ON"
     FORMATOPTION "QUANTIZE_DITHER=OFF"
     FORMATOPTION "QUANTIZE_COLORS=256"
   END

in our mapfile and my hypotheses is that the GD QUANTIZE process is
selecting different colors based on the colors available in the various
meta-tiles. The mapserver source code calls the following function for 
this process and from the GD manual:

> void gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int
> colorsWanted) gdImagePtr gdImageCreatePaletteFromTrueColor(gdImagePtr
> im, int ditherFlag, int colorsWanted) (FUNCTION)
> 
> gdImageCreatePaletteFromTrueColor returns a new image.
> gdImageTrueColorToPalette permanently converts the existing image.
> The two functions are otherwise identical.
> 
> The function converts a truecolor image to a palette-based image,
> using a high-quality two-pass quantization routine. If ditherFlag is
> set, the image will be dithered to approximate colors better, at the
> expense of some obvious "speckling." colorsWanted can be anything up
> to 256. If the original source image includes photographic
> information or anything that came out of a JPEG, 256 is strongly
> recommended. 100% transparency of a single transparent color in the
> original truecolor image will be preserved. There is no other support
> for preservation of alpha channel or transparency in the destination
> image.
> 
> For best results, don't use this function -- write real truecolor
> PNGs and JPEGs. The disk space gain of conversion to palette is not
> great (for small images it can be negative) and the quality loss is
> ugly. However, the version of this function included in version
> 2.0.12 and later does do a better job than the version included prior
> to 2.0.12.

So, a few questions:

1) Has anyone looked into the impact of using PNG24 images on
   a) image sizes
   b) ka-map tile-cache sizing
   c) compatibility with browsers
   d) impact on browser memory usage or performance
2) I thought Paul Spencer said to use DITHERED=OFF, is this correct
3) Has anyone looked at the GD routine? Would it be possible to add a 
palette of say 32 colors that would be "sticky" and priority over other 
colors?

-SteveW



More information about the MapServer-users mailing list