Mapserver relies on a gd library function to do the actual quantization, so there's little we can do about the color shifting you're experiencing another solution is to use a precomputed palette
OUTPUTFORMAT [... snip...] FORMATOPTION "PALETTE_FORCE=TRUE" FORMATOPTION "PALETTE=/path/to/my/palette.txt" END where palette.txt contains 1 rgb triplet per line cheers On Nov 30, 2007 9:09 PM, rich.fromm <[EMAIL PROTECTED]> wrote: > Stephen Woodbridge wrote: > > > > Thanks for the pointer to the bug. I will add some comments to it even > > though it is closed. > > > > Bart van den Eijnden (OSGIS) wrote: > >> there is some info by Frank in the following bug report (assuming it is > >> not outdated): > >> > >> http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=684 > > > > I think this may be just a rehashing of this same issue, which I think is > further covered in the following (the URL has moved): > > http://trac.osgeo.org/mapserver/ticket/684 > Trouble tricking Mapserver colors in 8-bit mode > Ticket #684 (closed defect: wontfix) > > Although since that was opened 4 years ago, last modified more than 1 year > ago, and this thread is from the time (>1 year ago) of that last > modification, > I want to make sure that this is valid and I'm understanding things > properly. > > I've narrowed this down to a very simple test case (see below). ALL that > I'm > attempting to displaying here is an 80% grey background. This works fine > with > both the AGG and GD rendering backends, as long as quantization is not > enabled. However, if I enable quantization, instead of getting a uniform > background of (204,204,204), I get (204,206,204). And I'm quite surprised > at > how visually noticeable such a small green shift is. I can preserve the > proper color if I use IMAGEMODE PC256 rather than IMAGEMODE RGB, but that is > only valid with GD. If I try to use it with AGG, I get the following error > message: > > --- > msDrawMap(): Image handling error. Unable to initialize > image. msPrepareImage(): GD library error. Unable to initialize > image. msImageCreateAGG(): AGG library error. AGG driver only supports RGB > or > RGBA pixel models. > --- > > I have a very strong preference for using AGG instead of GD. And I would > prefer to make my PNG's smaller by not using full 24bit color. I realize a > plain background is a bit of an extreme case, but in this case the size > difference is dramatic: > > -rw-r--r-- 1 rich engr 2809 2007-11-30 11:14 agg.png > -rw-r--r-- 1 rich engr 133 2007-11-30 11:15 agg_q.png > -rw-r--r-- 1 rich engr 2809 2007-11-30 11:14 gd.png > -rw-r--r-- 1 rich engr 133 2007-11-30 11:37 gd_q.png > -rw-r--r-- 1 rich engr 133 2007-11-30 11:47 gd_256.png > > And here are the color distributions within the images: > > agg.png -------- > 0: (204,204,204) grey80 > agg_q.png -------- > 0: (204,206,204) #CCCECC > gd.png -------- > 0: (204,204,204) grey80 > gd_q.png -------- > 0: (204,206,204) #CCCECC > gd_256.png -------- > 0: (204,204,204) grey80 > > I realize that sometimes quantization will by its very nature need to change > colors, but I had not expected this if the input image already had a > sufficiently small number of colors. > > Is this indeed still recognized as a known issue that is not going to be > fixed? One of the replies here suggested the possibility of reserving > colors > via a PALETTE option, but I can find no mention of this anywhere in the > docs. > > I suppose another option would be to have mapserver output 24bit color PNG > images and use some external program (like ImageMagick) to convert to 8bit > PNG. > > I am running mapserver-5.0.0, compiled with gd-2.0.35 and agg-2.5. > > Complete map files to reproduce my testcases are included below. > > - Rich Fromm > > --- begin agg.map --- > MAP > NAME agg > > IMAGETYPE AGG > OUTPUTFORMAT > NAME 'AGG' > DRIVER AGG/PNG > IMAGEMODE RGB > END > > EXTENT -122.293878 37.838295 -122.288122 37.841705 > > SIZE 640 480 > IMAGECOLOR 204 204 204 # background > END > --- end agg.map --- > > --- begin agg_q.map --- > MAP > NAME agg_q > > IMAGETYPE AGG_Q > OUTPUTFORMAT > NAME 'AGG_Q' > DRIVER AGG/PNG > IMAGEMODE RGB > FORMATOPTION "QUANTIZE_FORCE=ON" > FORMATOPTION "QUANTIZE_DITHER=OFF" > FORMATOPTION "QUANTIZE_COLORS=256" > END > > EXTENT -122.293878 37.838295 -122.288122 37.841705 > > SIZE 640 480 > IMAGECOLOR 204 204 204 # background > END > --- end agg_q.map --- > > --- begin gd.map --- > MAP > NAME gd > > IMAGETYPE PNG > OUTPUTFORMAT > NAME 'PNG' > DRIVER GD/PNG > IMAGEMODE RGB > END > > EXTENT -122.293878 37.838295 -122.288122 37.841705 > > SIZE 640 480 > IMAGECOLOR 204 204 204 # background > END > --- end gd.map --- > > --- begin gd_q.map --- > MAP > NAME gd > > IMAGETYPE PNG_Q > OUTPUTFORMAT > NAME 'PNG_Q' > DRIVER GD/PNG > IMAGEMODE RGB > FORMATOPTION "QUANTIZE_FORCE=ON" > FORMATOPTION "QUANTIZE_DITHER=OFF" > FORMATOPTION "QUANTIZE_COLORS=256" > END > > EXTENT -122.293878 37.838295 -122.288122 37.841705 > > SIZE 640 480 > IMAGECOLOR 204 204 204 # background > > END > --- end gd_q.map --- > > --- begin gd_256.map --- > MAP > NAME gd_256 > > IMAGETYPE PNG_256 > OUTPUTFORMAT > NAME 'PNG_256' > DRIVER GD/PNG > IMAGEMODE PC256 > END > > EXTENT -122.293878 37.838295 -122.288122 37.841705 > > SIZE 640 480 > IMAGECOLOR 204 204 204 # background > END > --- end gd_256.map --- > > -- > View this message in context: > http://www.nabble.com/Color-shifts-using-QUANTIZE_COLORS%3D256-tf2080351.html#a14092078 > Sent from the Mapserver - User mailing list archive at Nabble.com. >