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 ---