[mapserver-dev] Optimized JPEG output

Even Rouault even.rouault at spatialys.com
Thu Dec 25 08:14:29 PST 2014


Father Christmas/Santa Clauss brought enhancements in JPEG output.

Digging around that topic recently in GDAL, I've looked in MapServer too and 
saw that JPEG output uses standard Huffman tables instead of optimized Huffman 
coding. Optimized Huffman coding actually looks at the symbols to be emitted to 
build the most efficient Huffman coding to generate the smallest possible output. 
For exactly the same quality (Huffman is the lossless compression stage of JPEG 
compression), output can be a few percent smaller with optimized Huffman coding 
(I've got 11% improvement on a BMNG tile with JPEG-compressed TIFF) . Enabling 
it is just a matter of adding "cinfo.optimize_coding = TRUE;". The output is 
just a standard baseline JPEG, so that doesn't affect compatibility.
At the time libjpeg6b was developed, this feature wasn't enabled by default 
because it requires a full pass on the output to generate statistics of the 
frequency of each symbol, which has some cost. This was 15 years ago. 
Computers have changed a lot since then and optimized coding should be pretty 
much inexpensive nowadays (I haven't benchmarked extensively, but for typical 
256x256 tiles, I can't really notice any time difference.)
Hence https://github.com/mapserver/mapserver/pull/5056 that proposes to enable 
it by default :

Add OPTIMIZED=YES/NO/ARITHMETIC (default YES) format option to turn on 
optimized Huffman coding.
If set to NO, use standard Huffman tables (a little bit faster in theory, but
less efficient for output size).
If set to ARITHMETIC, will use Arithmetic entropy coding instead of Huffman, 
for smaller size. Note that Arithmetic coding/decoding is available in 
libjpeg-turbo implementation, but not in IJG libjpeg-6b or later. So must only 
be used in combinations with clients that are known to be able to decode 
Arithmetic encoded JPEG.

Any thoughts about merging that into master ?


Spatialys - Geospatial professional services

More information about the mapserver-dev mailing list