Reviewers: shindig-dev,

Description:
This code is the basis for integrating image rewriting into the Shindig
proxy pipeline. This code will try to make reasonable assumptions about
what target image format is most suitable and then serialize to that
format. If the content is smaller than the original then it is used. A
fairly high degree of configurability is added and protections to ensure
that rogue images cannot create exceesively large memory burdens on the
VM

For sample traffic seen on Orkut this kind of rewriting can yield pretty
substantial reductions in image size. Ill post more thorough results
later.

Details
GIF - We dont rewrite animated GIFs though we could it is an expensive
process doing frame to frame differencing. We also dont rewrite
transparent GIF currently though we could later with a reasonable
AlphaImageLoader solution for IE6

PNG - Most PNG writers dont do a good job stripping metadata or
minimizing palette and bit depth, or they use palettes when the image is
small. This will fix most of this. We also attempt to rewrite to JPEG if
the image is opaque and only if it yields a significant improvement ( >
20%)  over an efficient PNG. JPEG should only provide significant
improvement if the image is photographic in nature.

JPEG - We strip metadata and allow for configurable compression level.

Please review this at http://codereview.appspot.com/10841

Affected files:
  java/common/conf/shindig.properties
java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/GIFOptimizer.java java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriter.java java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/ImageUtils.java java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/OptimizerConfig.java java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizer.java java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizerTest.java java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/GIFOptimizerTest.java java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/PNGOptimizerTest.java java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/animated.gif java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/inefficient.png java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/large.gif java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/large.jpg java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/rgbawithnoalpha.png java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/small.jpg java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/image/unanimated.gif
  pom.xml


Reply via email to