Author: gagan
Date: Fri Nov 19 02:51:09 2010
New Revision: 1036718

URL: http://svn.apache.org/viewvc?rev=1036718&view=rev
Log:
patch by satya3656 | Issue 3141041: Made changes to JPEGOptimizer to respect 
the config parameter jpegConversionAllowed | 
http://codereview.appspot.com/3141041/

Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java?rev=1036718&r1=1036717&r2=1036718&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
 Fri Nov 19 02:51:09 2010
@@ -88,7 +88,7 @@ public class BasicImageRewriter implemen
   private static final int DEFAULT_QUALITY = 100;
   private static final int BITS_PER_BYTE = 8;
   private static final Color COLOR_TRANSPARENT = new Color(255, 255, 255, 0);
-  private static final String CONTENT_TYPE = "Content-Type";
+  public static final String CONTENT_TYPE = "Content-Type";
   private static final Logger LOG = 
Logger.getLogger(BasicImageRewriter.class.getName());
 
   private static final Set<String> SUPPORTED_MIME_TYPES = ImmutableSet.of(
@@ -322,7 +322,7 @@ public class BasicImageRewriter implemen
 
       // Step#5: Optimize the supported image formats viz PNG, GIF, JPG & BMP 
using 'BaseOptimizer'
       // and it's subclass implementations for the above four formats.
-      applyOptimizer(response, imageFormat, image);
+      applyOptimizer(response, imageFormat, image, config);
     } catch (IOException ioe) {
       LOG.log(Level.WARNING, "IO Error rewriting image " + request.toString() 
+ " - " + ioe.getMessage());
     } catch (RuntimeException re) {
@@ -424,8 +424,8 @@ public class BasicImageRewriter implemen
     g2d.setComposite(AlphaComposite.SrcOver);
   }
 
-  private void applyOptimizer(HttpResponseBuilder response, ImageFormat 
imageFormat,
-      BufferedImage image) throws IOException {
+  protected void applyOptimizer(HttpResponseBuilder response, ImageFormat 
imageFormat,
+      BufferedImage image, OptimizerConfig config) throws IOException {
     if (imageFormat == ImageFormat.IMAGE_FORMAT_GIF) {
       // Detecting the existence of the NETSCAPE2.0 extension by string 
comparison
       // is not exactly clean but is good enough to determine if a GIF is 
animated
@@ -460,7 +460,7 @@ public class BasicImageRewriter implemen
     return imageSizeBits > config.getMaxInMemoryBytes() * BITS_PER_BYTE;
   }
 
-  private boolean isSupportedContent(HttpResponseBuilder response) {
+  protected boolean isSupportedContent(HttpResponseBuilder response) {
     return SUPPORTED_MIME_TYPES.contains(response.getHeader(CONTENT_TYPE));
   }
 

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java?rev=1036718&r1=1036717&r2=1036718&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizer.java
 Fri Nov 19 02:51:09 2010
@@ -59,21 +59,23 @@ public class JPEGOptimizer extends BaseO
 
   @Override
   protected void rewriteImpl(BufferedImage image) throws IOException {
-    // Create a new optimizer config and disable JPEG conversion
-    OptimizerConfig pngConfig = new 
OptimizerConfig(config.getMaxInMemoryBytes(),
-        config.getMaxPaletteSize(), false, config.getJpegCompression(),
-        config.getMinThresholdBytes(), config.getJpegHuffmanOptimization());
-
-    // Output the image as PNG
-    PNGOptimizer pngOptimizer = new PNGOptimizer(pngConfig, response);
-    pngOptimizer.rewriteImpl(image);
-
     int pngLength = Integer.MAX_VALUE;
-    if (pngOptimizer.getRewrittenImage()  != null) {
-      // PNG was better than original so use it
-      minBytes = pngOptimizer.getRewrittenImage();
-      minLength = minBytes.length;
-      pngLength = minLength;
+    if (config.isJpegConversionAllowed()) {
+      // Create a new optimizer config and disable JPEG conversion
+      OptimizerConfig pngConfig = new 
OptimizerConfig(config.getMaxInMemoryBytes(),
+          config.getMaxPaletteSize(), false, config.getJpegCompression(),
+          config.getMinThresholdBytes(), config.getJpegHuffmanOptimization());
+
+      // Output the image as PNG
+      PNGOptimizer pngOptimizer = new PNGOptimizer(pngConfig, response);
+      pngOptimizer.rewriteImpl(image);
+      
+      if (pngOptimizer.getRewrittenImage()  != null) {
+        // PNG was better than original so use it
+        minBytes = pngOptimizer.getRewrittenImage();
+        minLength = minBytes.length;
+        pngLength = minLength;
+      }
     }
 
     // Write as standard JPEG using the configured default compression level

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java?rev=1036718&r1=1036717&r2=1036718&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
 Fri Nov 19 02:51:09 2010
@@ -39,6 +39,15 @@ public class JPEGOptimizerTest extends B
   }
 
   @Test
+  public void testSmallJPEGIsNotConvertedToPNGWithJpegConversionDisabled() 
throws Exception {
+    HttpResponse resp =
+        createResponse("org/apache/shindig/gadgets/rewrite/image/small.jpg", 
"image/jpeg");
+    HttpResponse rewritten = rewrite(resp, 
getDefaultConfigWithJpegConversionDisabled());
+    assertEquals("image/jpeg", rewritten.getHeader("Content-Type"));
+    assertTrue(rewritten.getContentLength() <= resp.getContentLength());
+  }
+
+  @Test
   public void testLargeJPEG() throws Exception {
     HttpResponse resp =
         createResponse("org/apache/shindig/gadgets/rewrite/image/large.jpg", 
"image/jpeg");
@@ -99,11 +108,23 @@ public class JPEGOptimizerTest extends B
     rewrite(resp);
   }
 
-  HttpResponse rewrite(HttpResponse original)
+  HttpResponse rewrite(HttpResponse original) throws Exception {
+    return rewrite(original, new OptimizerConfig());
+  }
+
+  HttpResponse rewrite(HttpResponse original, OptimizerConfig config)
       throws IOException, ImageReadException {
     HttpResponseBuilder builder = new HttpResponseBuilder(original);
-    new JPEGOptimizer(new OptimizerConfig(), builder).rewrite(
+    new JPEGOptimizer(config, builder).rewrite(
         JPEGOptimizer.readJpeg(original.getResponse()));
     return builder.create();
   }
+
+  OptimizerConfig getDefaultConfigWithJpegConversionDisabled() {
+    OptimizerConfig defaultConfig = new OptimizerConfig();
+    return new OptimizerConfig(defaultConfig.getMaxInMemoryBytes(),
+    defaultConfig.getMaxPaletteSize(), false,
+    defaultConfig.getJpegCompression(), defaultConfig.getMinThresholdBytes(),
+    defaultConfig.getJpegHuffmanOptimization());
+  }
 }
\ No newline at end of file


Reply via email to