<div dir="ltr">I did some testing and summarized my results in this <a href="https://docs.google.com/spreadsheets/d/169tfJbAciEO0ojLKkteyzfMTaueS2vHDp4tPw4l6szk/edit#gid=872662075">Google spreadsheet</a>. My initial goal was to switch from MapServer 6 to 7, and thus from GIF to PNG since the GD/GIF driver is gone in MapServer 7. I'm looking for a palleted PNG format similar in size to GIF. PNG uses sub-pixel anti-aliasing which makes images larger than GIFs which uses color interpolation to  anti-alias. MapServer 7 does not have a built-in mechanism to disable anti-aliasing in either the AGG or Cairo drivers but with minor modifications to the source code it can be disabled. The spreadsheet compares five output formats: GD/GIF, AGG/PNG8, AGG/PNG8 w/o anti-aliasing, Cairo/PNG8, and Cairo/PNG8 w/o anti-aliasing. <div><br></div><div>I used three different source maps with significantly different content (they're linked in the spreadsheet). Not surprisingly, the PNG8 images look the best, GIF looks okay, and images without anti-aliasing look pretty poor. The size of the images generally corresponds to the visual quality. In other words, I did not find any magic way to consistently make really nice, really small images. But depending on the content there are some ways to significantly reduce size and still get a nice looking image.</div><div><br></div><div>The spreadsheet includes some timing tests. I did these with Apache Bench, they're not especially rigorous.</div><div><br></div><div>Thanks to all who commented on this thread, I learned quite a bit.</div><div>Rich<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 20, 2021 at 2:58 AM Eichner, Andreas - SID <<a href="mailto:Andreas.Eichner@sid.sachsen.de">Andreas.Eichner@sid.sachsen.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Well, anti-aliased maps look much better and are basically the way to go. But in some corner cases it would be great to be able to turn this feature off. Cairo provides a single switch to do that and a patch that enables control over that from within MapServer can be simple and straight forward. With a little more effort this can be extended to switch between all possible CAIRO_ANTIALIAS_* values. So IMHO integrating this option for the Cairo renderer seems to be a good idea. For the AGG renderer it requires more work to make this runtime controllable. <br>
<br>
@Richard: The difference between both renderers is impressive. Since you are using this with much more complex maps can you give some feedback which one which one looks "better" (with tuning applied) and how usable the result is?<br>
<br>
Regards, Andreas<br>
<br>
-----Ursprüngliche Nachricht-----<br>
Von: Steve Lime <<a href="mailto:sdlime@gmail.com" target="_blank">sdlime@gmail.com</a>> <br>
Gesendet: Mittwoch, 19. Mai 2021 18:24<br>
An: Eichner, Andreas - SID <<a href="mailto:Andreas.Eichner@sid.sachsen.de" target="_blank">Andreas.Eichner@sid.sachsen.de</a>><br>
Cc: Richard Greenwood <<a href="mailto:richard.greenwood@gmail.com" target="_blank">richard.greenwood@gmail.com</a>>; mapserver <<a href="mailto:mapserver-users@lists.osgeo.org" target="_blank">mapserver-users@lists.osgeo.org</a>><br>
Betreff: Re: [mapserver-users] anti-aliasing (was differing image size with different mapserver versions)<br>
<br>
Worth adding to main?<br>
<br>
On Wed, May 19, 2021 at 10:15 AM Eichner, Andreas - SID <<a href="mailto:Andreas.Eichner@sid.sachsen.de" target="_blank">Andreas.Eichner@sid.sachsen.de</a> <mailto:<a href="mailto:Andreas.Eichner@sid.sachsen.de" target="_blank">Andreas.Eichner@sid.sachsen.de</a>> > wrote:<br>
<br>
<br>
        If you want to give Cairo a try, you could modify mapcairo.c like this:<br>
<br>
        diff --git a/mapcairo.c b/mapcairo.c<br>
        index 0f4cc094..d28947d6 100644<br>
        --- a/mapcairo.c<br>
        +++ b/mapcairo.c<br>
        @@ -517,6 +517,12 @@ imageObj* createImageCairo(int width, int height, outputFormatObj *format,colorO<br>
<br>
             cairo_set_line_cap (r->cr,CAIRO_LINE_CAP_ROUND);<br>
             cairo_set_line_join(r->cr,CAIRO_LINE_JOIN_ROUND);<br>
        +    {<br>
        +        const char* antialias = msGetOutputFormatOption(format, "ANTIALIAS", "TRUE");<br>
        +        if (EQUAL(antialias, "OFF") || EQUAL(antialias, "FALSE") || EQUAL(antialias, "0")) {<br>
        +            cairo_set_antialias(r->cr, CAIRO_ANTIALIAS_NONE);<br>
        +        }<br>
        +    }<br>
             image->img.plugin = (void*)r;<br>
           } else {<br>
             msSetError(MS_RENDERERERR, "Cannot create cairo image of size %dx%d.",<br>
<br>
        This adds a FORMATOPTION "ANTIALIAS" to the CAIRO/*-Drivers that defaults to TRUE. But when explicitly set to 0/OFF/FALSE it calls cairo_set_antialias() to disable it. The raster buffer created by the CAIRO renderer is passed to the PNG writer which enables COMPRESSION, PALETTE_FORCE, QUANTIZE_FORCE. So you can combine it:<br>
<br>
         OUTPUTFORMAT<br>
           NAME "cairopng"<br>
           DRIVER CAIRO/PNG<br>
           MIMETYPE "image/png"<br>
           IMAGEMODE RGB<br>
           EXTENSION "png"<br>
           FORMATOPTION "ANTIALIAS=FALSE"<br>
           FORMATOPTION "QUANTIZE_FORCE=ON"<br>
           FORMATOPTION "QUANTIZE_COLORS=256"<br>
           FORMATOPTION "COMPRESSION=9"<br>
         END<br>
<br>
        I used the msautotest/renderers/line_simple.map example to test and that crushed the resulting png from 5920 bytes down to 947 bytes. <br>
<br>
        HTH, Andreas<br>
<br>
<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">Richard W. Greenwood, PLS<br><a href="http://www.greenwoodmap.com" target="_blank">www.greenwoodmap.com</a></div></div>