[ka-Map-users] Color shifts using QUANTIZE_COLORS=256

Steve Lime Steve.Lime at DNR.STATE.MN.US
Thu Aug 10 09:01:34 PDT 2006


Palettes, as computed in the MapServer 3.x series, were used to
initialize 8-bit
images. That was pre-24-bit support and I don't think would be helpful
in the
24-bit to 8-bit conversion.

If you were to use a pre-computed palette then you wouldn't need to
quantitize 
since a color map is the output of that process. You would just need to
filter the
24-bit data through the map (with gdImageColorClosest or whatever) to
arrive
at an 8-bit image. 

I have used ImageMagick to do something like that years ago. I took a
representative
24-bit image and used ImageMagick to convert to 8-bit (which it does
nicely) then
use that color map with the convert command (the -map option) to
process the rest
of the files. At the end they all had the same color map.

So my idea would be to support a PALETTE like that (instead of
quantitizing)...

Steve


>>> Paul Spencer <pspencer at dmsolutions.ca> 08/10/06 7:33 AM >>>
Steve and Steve :)

what would it take to get the PALETTE option implemented (perhaps for 

5.0?) and supported in the quantization code?

ImageMagick does do this very well.  I would assume that AGG could do 

the same, and likely much faster than ImageMagick (which appears to  
be 2-5 times slower).

Cheers

Paul

On 9-Aug-06, at 8:55 PM, Stephen Woodbridge wrote:

> Steve Lime wrote:
>> You know what's funny is that old versions of MapServer used to  
>> reserve
>> colors
>> by computing a palette when looking at the mapfile. That way the  
>> vector
>> data
>> always was consistent.
>
> I think there is has been code added to do this again in the  
> current version of code.
>
>> I think a PALETTE option within the IMAGE block might be a way to
go.
>> That way
>> you could define a set of colors to pre-allocate when setting up 8-

>> bit
>> imagery. Something
>> like:
>>   PALETTE 'colors.txt'
>> Where colors.txt would contain:
>> r g b
>> r g b
>> ...
>
> The other way to do this that I have been doing for some time now  
> is to create an image in photoshop and set single pixels to the  
> colors that are important to me and insert is as the first LAYER in 

> the mapfile which causes its colors to be added to the map image  
> before any antialiasing is done.
>
> BUT, this does not solve the problem of PNG24 RGBA images required  
> for AA brushes and squashing images to PNG8 with the  
> gdCreateColorPaletteFromTrueColor() (or whatever it is called)  
> function because we do not have direct control of the color palette 

> in this case, unless we clone and modify the algorithm by somehow  
> making the colors "sticky" in the palette.
>
> Steve I would be interested in knowing what you think about the  
> later approach.
>
> Since I only have limited experience with ImageMagick, it is really 

> hard for me to say if it would solve these particular problems or  
> not. Than again, if we want really pretty images AGG seems to be  
> the way to go :)
>
> -SteveW
>
>> Steve
>> Stephen Lime
>> Data & Applications Manager
>> Minnesota DNR
>> 500 Lafayette Road
>> St. Paul, MN 55155
>> 651-259-5473
>>>>> Stephen Woodbridge <woodbri at swoodbridge.com> 08/09/06 4:56 PM
>>>
>> Paul Spencer wrote:
>>> Steve,
>>>
>>> I concluded the same thing you did (that the colours are  
>>> mangled).  FrankW had an explanation for this that I didn't  
>>> really understand.
>> He
>>> suggested that providing a mechanism to specify a fixed colour  
>>> table would be the real answer.
>>>
>>> Tile sizes in my experiments were 50% smaller in most cases  
>>> (using quantization).
>>>
>>> Dithering had no observable effect on the colour problem, but did
>> result
>>> in crappy looking images in most cases (hence I suggested turning
it
>> off).
>>> ImageMagick is able to produce outstanding 8bit pngs from 24bit  
>>> antialiased images, so it is possible.
>> So have you guys done anything along the line of integrating  
>> ImageMagick
>>   with mapserver? How did you do your testing with ImageMagick? It 

>> seems
>> that most of my tiles are close enough in color that it is not  
>> noticeable, but every now and then there is a very noticeable
>> difference.
>>> I would love to see something in mapserver that kept track of all 

>>> the colours that were allocated in the various styles and
rendering
>> stages,
>>> and from the headers of the raster symbols, and used that as the
>> colour
>>> table when doing quantization or whatever is needed.
>>>
>>> As a minimum, it should be possible to specify a COLORS block or  
>>> something at the MAP level that would force those colours into  
>>> the output image.  This would actually solve a long standing  
>>> issue with 8 bit images and raster symbols where antialiased text 

>>> uses all the colours and then the raster symbol colours get
mangled.
>> Yeah, it seems we should do something like this. We have been  
>> struggling
>> with color shift issues for a few years now. We fix one and  
>> another pops
>> up.
>> Do you have any thoughts on using ImageMagick vs AGG? It seems  
>> that AGG would produce better images in general. I wonder if it  
>> does antialiasing
>> directly into an 8-bit image which I would think would give you  
>> much better control.
>> -Steve
>>> My 2c
>>>
>>> Paul
>>>
>>> On 9-Aug-06, at 1:56 PM, Stephen Woodbridge wrote:
>>>
>>>> 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
>>>> _______________________________________________
>>>> ka-Map-users mailing list
>>>> ka-Map-users at lists.maptools.org 
>>>> http://lists.maptools.org/mailman/listinfo/ka-map-users 
>>>
+-----------------------------------------------------------------+
>>> |Paul Spencer                           pspencer at dmsolutions.ca  
|
>>>
+-----------------------------------------------------------------+
>>> |Applications & Software Development                             
|
>>> |DM Solutions Group Inc                 http://www.dmsolutions.ca/|

>>>
+-----------------------------------------------------------------+
>>>
>>>
>>>
>>>
>>>
>> _______________________________________________
>> ka-Map-users mailing list
>> ka-Map-users at lists.maptools.org 
>> http://lists.maptools.org/mailman/listinfo/ka-map-users 
>

+-----------------------------------------------------------------+
|Paul Spencer                           pspencer at dmsolutions.ca   |
+-----------------------------------------------------------------+
|Applications & Software Development                              |
|DM Solutions Group Inc                 http://www.dmsolutions.ca/| 
+-----------------------------------------------------------------+




_______________________________________________
ka-Map-users mailing list
ka-Map-users at lists.maptools.org 
http://lists.maptools.org/mailman/listinfo/ka-map-users



More information about the MapServer-users mailing list