Hi all, I would submit a proposal for changing the GeoWebCache WMSTileFuser class.
This class presents some limitations associated to bad performances on reading the input tiles and writing the final image. These performances are dued to a direct call to the ImageIO methods. A possible improvement could be to skip the ImageIO methods by adding some classes which internally handle image writing and reading. Also the output image can be optimized, if it is PNG8, with an optimal colorTable. Finally better performance and quality results could be achieved with improvements on the image scaling phase. This proposal requires moving some code to avoid cyclic dependencies: - moving Quantizer from GeoServer to GeoTools. - moving the new PNGEncoder from GeoServer to ImageIO-Ext and leaving only a single facade class which calls the PNGEncoder. The GeoServer, GeoTools, GeoWebCache and ImageIO-Ext versions are all taken from their master branch, but a backport will be needed: - for Geoserver on 2.4.x; - for GeoWebCache on 1.5.0; - for ImageIo-Ext on 1.1.x; - for GeoTools 10.x. The modifications on the WMSTileFuser class can be divided in 3 groups: - improving the reading of every tile and the final image writing by adding few classes and avoiding to call directly the ImageIO class, which requires a lookup of the streams and readers/writers; - improving the PNG8 images by applying the Quantizer on them; - improving the scaling of the final image by adding RenderingHints. The first improvement consist of creating 2 container classes which internally handle the writing/reading by automatically using the encoder/decoder for the defined MimeType. These encoders/decoders are defined in the Spring application context as subclasses of 2 new abstract classes called ImageDecoder and ImageEncoder. Each subclass internally searches all the Spi classes defined in the associated bean configuration and then stores the first Spi available. All the encoder/decoder beans are injected into the related container when the application is launched. For PNG images, the new GeoServer PNGEncoder is used by default, but the user can disable this functionality by changing a property file associated. An UML diagram could help understanding these modifications. The second improvement consists of calculating an optimal ColorTable associated to the image with the Quantizer class. The last improvement consists of using an optimal configuration for the RenderingHints for having better quality and speed. The estimated time is 1/2 days. If there is any question I would be pleased to answer. Best Regards, Nicola Lagomarsini. -- == Our support, Your Success! Visit http://opensdi.geo-solutions.it for more information. == Ing. Nicola Lagormarsini Junior Software Engineer GeoSolutions S.A.S. Via Poggio alle Viti 1187 55054 Massarosa (LU) Italy phone: +39 0584 962313 fax: +39 0584 1660272 http://www.geo-solutions.it http://twitter.com/geosolutions_it -------------------------------------------------------
<<attachment: uml_diag.png>>
------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel