forced palette and quantization for RGBA images

Steve Lime Steve.Lime at DNR.STATE.MN.US
Mon Jan 7 13:31:13 EST 2008


Looking forward to trying. In theory couldn't this also be applied to GIFs (if GD wasn't having problems)?

Steve

>>> On 1/6/2008 at 3:52 AM, in message
<d2b988930801060152k1f7abb5dg50dae7094434a49 at mail.gmail.com>, thomas bonfort
<thomas.bonfort at GMAIL.COM> wrote:
> hi all,
> 
> I committed the implementation to enable forced palette and color
> reduction via quantization for RGBA images. These options greatly
> reduce image size for png output when using IMAGEMODE RGBA.
> 
> the tracking ticket is http://trac.osgeo.org/mapserver/ticket/2436 ,
> which contains examples of image size reduction you can hope to obtain
> when using the option
> 
> you'll need a recent version of the mapserver source tree from SVN (
> instructions to obtain it:
> http://mapserver.gis.umn.edu/development/cvs/ )
> 
> it is activated when the ./configure script is run with the
> --with-experimental-png switch, which checks for the libpng headers.
> this means that the libpng headers have to be installed and accessible
> on your system (apt-get install libpng-dev or the equivalent with
> yum/yast/etc...)
> 
> to activate these outputs in your mapfiles you'll need to set some
> FORMATOPTION entries to the wanted OUTPUTFORMATs, eg
> 
> ************************
> to force quantization
> ************************
> (creates a paletted png, with the palette automatically
> created/selected for each rendered image)
> 
> OUTPUTFORMAT
>     NAME 'AGGAQ'
>     DRIVER AGG/PNG # not AGG specific, also works with GD. PNG is
> mandatory though
>     IMAGEMODE RGBA  # only for rgba imagemodes
>     MIMETYPE "image/png"
> 
> # this is the important part
>     FORMATOPTION "QUANTIZE_FORCE=ON"
> 
> # this specifies the number of colors wanted in the final image
> # 256 is the typically wanted value
> # values 17 to 255 are possible but don't really make sense as there's
> little reduction in file size compared to 256 (each pixel is still
> stored with 8 bits, only the palette is smaller)
> # 16 greatly reduces image size (and quality, no magic)
>     FORMATOPTION "QUANTIZE_COLORS=256"
> END
> 
> 
> **********************************************
>  to use a specified precomputed palette
> **********************************************
> (faster than quantization, and guarantees colors are consistent
> whatever the image created, but less flexible as the palette has to be
> precomputed and is fixed whatever is in the image)
> 
> OUTPUTFORMAT
>     NAME 'AGGAP'
>     DRIVER AGG/PNG
>     IMAGEMODE RGBA
>     MIMETYPE "image/png"
> 
> # the important part
>     FORMATOPTION "PALETTE_FORCE=TRUE"
>     FORMATOPTION "PALETTE=/gro/jsigmaps/palette.txt"
> END
> 
> here the palette file must be specified with an absolute path, and
> contains at most 256 lines, each consisting of an r,g,b,a quadruplet,
> eg:
> 
> 0,0,0,0
> 127,127,127,2
> 196,226,251,237
> 170,170,170,2
> 191,191,191,4
> 196,225,251,233
> ...
> snip
> ...
> 163,189,242,57
> 137,158,242,56
> 118,137,241,48
> 184,213,245,75
> 
> to obtain this palette, take a typical (32bit rgba png) image you will
> want to display, use your favorite image editor to reduce the number
> of colors (photoshop using "save web image" and selecting png, or the
> commandline utilities pngquant
> [http://libpng.org/pub/png/apps/pngquant.html] or neuquant
> [http://members.ozemail.com.au/~dekker/NEUQUANT.HTML], etc ) and then
> extract (and transform to the required r,g,b,a format) the computed
> palette to the palette file. ( pngcheck
> [http://www.libpng.org/pub/png/apps/pngcheck.html] with its -p option
> and some scripting can be used for this )
> 
> 
> 
> these two options are still considered experimental, and any feedback
> you might give is welcome ( be it in the ./configure script,
> compiling, or image results )
> 
> cheers,
> thomas
> 
> ps: email sent for documentation purposes until the official
> documentation is created/released on the main documentation site



More information about the mapserver-dev mailing list