Color shifts using QUANTIZE_COLORS=256

Stephen Woodbridge woodbri at SWOODBRIDGE.COM
Fri Nov 30 15:37:09 EST 2007


Try using something liek this:

   OUTPUTFORMAT
     NAME "agg/png24"
     MIMETYPE "image/png; mode=24bit"
     DRIVER "AGG/PNG"
     EXTENSION "png"
     FORMATOPTION "PALETTE_FORCE=TRUE"
     FORMATOPTION "PALETTE=/u/data/maps/palette-google-agg.txt"
   END

where /u/data/maps/palette-google-agg.txt has something like this in it. 
Obviously pick the colors that you want to quantize to:

0,0,0
0,0,89
0,0,255
0,100,0
51,51,0
75,200,75
100,100,100
119,119,119
136,136,136
150,150,150
153,153,153
153,179,204
167,204,149
170,153,136
170,153,34
171,153,136
180,176,177
187,187,187
200,75,200
200,200,200
204,204,204
208,208,205
210,201,138
220,220,5
230,230,230
233,228,218
236,230,220
238,102,34
238,187,34
242,239,233
245,245,231
255,0,0
255,221,68
255,255,119
255,255,238
255,255,255



rich.fromm 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 ---
> 



More information about the mapserver-users mailing list