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