Author: lryan
Date: Fri Feb 27 20:03:15 2009
New Revision: 748673

URL: http://svn.apache.org/viewvc?rev=748673&view=rev
Log:
Allow implementors to override image reading routines for the image rewriter

Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java?rev=748673&r1=748672&r2=748673&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
 Fri Feb 27 20:03:15 2009
@@ -26,6 +26,10 @@
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 
+import com.google.common.collect.ImmutableSet;
+import com.google.inject.Inject;
+
+import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
@@ -34,9 +38,6 @@
 
 import javax.imageio.ImageIO;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Inject;
-
 /**
  * Rewrite images to more efficiently compress their content. Can rewrite 
images
  * from one format to another for better efficiency.
@@ -115,22 +116,14 @@
         // is not exactly clean but is good enough to determine if a GIF is 
animated
         // Remove once Sanselan returns image count
         if (!response.getResponseAsString().contains("NETSCAPE2.0")) {
-          response = new GIFOptimizer(config, response).rewrite(
-              Sanselan.getBufferedImage(response.getResponse()));
+          response = new GIFOptimizer(config, 
response).rewrite(readGif(response));
         }
       } else if (imageFormat == ImageFormat.IMAGE_FORMAT_PNG) {
-        response = new PNGOptimizer(config, response)
-            .rewrite(Sanselan.getBufferedImage(response.getResponse()));
+        response = new PNGOptimizer(config, 
response).rewrite(readPng(response));
       } else if (imageFormat == ImageFormat.IMAGE_FORMAT_JPEG) {
-        // We cant use Sanselan to read JPEG but we can use it to read all the 
metadata which is
-        // where we have issues anyway
-        Sanselan.getMetadata(response.getResponse(), null);
-        Sanselan.getICCProfile(response.getResponse(), null);
-        response = new JPEGOptimizer(config, response)
-            .rewrite(ImageIO.read(response.getResponse()));
+        response = new JPEGOptimizer(config, 
response).rewrite(readJpeg(response));
       } else if (imageFormat == ImageFormat.IMAGE_FORMAT_BMP) {
-        response = new BMPOptimizer(config, response)
-            .rewrite(Sanselan.getBufferedImage(response.getResponse()));
+        response = new BMPOptimizer(config, 
response).rewrite(readBmp(response));
       }
       rewrittenImageBytes.addAndGet(response.getContentLength());
     } catch (IOException ioe) {
@@ -188,4 +181,28 @@
   public long getRewrittenImageBytes() {
     return rewrittenImageBytes.get();
   }
+
+  // The following methods are intended to be overridden by implementors if 
they need to
+  // implement additional security constraints or use their own more efficient
+  // image reading mechanisms
+
+  protected BufferedImage readBmp(HttpResponse response) throws 
ImageReadException, IOException {
+    return Sanselan.getBufferedImage(response.getResponse());
+  }
+
+  protected BufferedImage readPng(HttpResponse response) throws 
ImageReadException, IOException {
+    return Sanselan.getBufferedImage(response.getResponse());
+  }
+
+  protected BufferedImage readGif(HttpResponse response) throws 
ImageReadException, IOException {
+    return Sanselan.getBufferedImage(response.getResponse());
+  }
+
+  protected BufferedImage readJpeg(HttpResponse response) throws 
ImageReadException, IOException {
+    // We cant use Sanselan to read JPEG but we can use it to read all the 
metadata which is
+    // where most security issues reside anyway in ImageIO
+    Sanselan.getMetadata(response.getResponse(), null);
+    Sanselan.getICCProfile(response.getResponse(), null);
+    return ImageIO.read(response.getResponse());
+  }
 }


Reply via email to