Color shifts using QUANTIZE_COLORS=256

thomas bonfort thomas.bonfort at GMAIL.COM
Fri Nov 30 16:12:05 EST 2007


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 <nospam420 at yahoo.com> 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.
>



More information about the mapserver-users mailing list