You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2009/09/09 22:49:43 UTC

svn commit: r813113 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java

Author: johnh
Date: Wed Sep  9 20:49:42 2009
New Revision: 813113

URL: http://svn.apache.org/viewvc?rev=813113&view=rev
Log:
In the image rewriter, support new parameter "noExpand". With a value of
"true," this flag signals the rewriter to ignore resizing. Optimization passes
(ie. color palettes, format conversion) will still be performed.


Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.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=813113&r1=813112&r2=813113&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 Wed Sep  9 20:49:42 2009
@@ -73,6 +73,8 @@
   public static final String PARAM_RESIZE_WIDTH = "resize_w";
   /** Parameter used to request image height change */
   public static final String PARAM_RESIZE_HEIGHT = "resize_h";
+  /** Parameter used to request resizing will not expand image */
+  public static final String PARAM_NO_EXPAND = "no_expand";
 
   public static final String
       CONTENT_TYPE_AND_EXTENSION_MISMATCH =
@@ -120,8 +122,8 @@
       if (!isSupportedContent(response) && !isImage(uri)) {
         return response;
       }
-      if (!isUsableParameter(requestedWidth) || !isUsableParameter(requestedHeight)
-          || !isUsableParameter(resizeQuality)) {
+      if (!isUsableParameter(requestedWidth) || !isUsableParameter(requestedHeight) ||
+          !isUsableParameter(resizeQuality)) {
         return response;
       }
 
@@ -140,6 +142,13 @@
       }
 
       ImageInfo imageInfo = Sanselan.getImageInfo(response.getResponse(), uri.getPath());
+      
+      if ("true".equals(request.getParam(PARAM_NO_EXPAND)) &&
+          imageInfo.getHeight() <= requestedHeight &&
+          imageInfo.getWidth() <= requestedWidth) {
+        // Don't do anything, since the current image fits within the bounding area.
+        isResizeRequested = false;
+      }
 
       boolean isOversizedImage = isImageTooLarge(imageInfo);
       if (isResizeRequested && isOversizedImage) {
@@ -160,7 +169,6 @@
       BufferedImage image = readImage(imageFormat, response);
 
       if (isResizeRequested) {
-
         int origWidth = imageInfo.getWidth();
         int origHeight = imageInfo.getHeight();
         int widthDelta = 0;

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java?rev=813113&r1=813112&r2=813113&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java Wed Sep  9 20:49:42 2009
@@ -24,6 +24,7 @@
 import static org.apache.shindig.gadgets.rewrite.image.BasicImageRewriter.PARAM_RESIZE_HEIGHT;
 import static org.apache.shindig.gadgets.rewrite.image.BasicImageRewriter.PARAM_RESIZE_QUALITY;
 import static org.apache.shindig.gadgets.rewrite.image.BasicImageRewriter.PARAM_RESIZE_WIDTH;
+import static org.apache.shindig.gadgets.rewrite.image.BasicImageRewriter.PARAM_NO_EXPAND;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.classextension.EasyMock.createControl;
 
@@ -94,12 +95,20 @@
     assertNotNull(imageBytes);
     return imageBytes;
   }
-
+  
   private BufferedImage getResizedHttpResponseContent(String sourceContentType,
       String targetContentType, String imageName, Integer width, Integer height, Integer quality)
       throws Exception {
+    return getResizedHttpResponseContent(
+        sourceContentType, targetContentType, imageName, width, height, quality, false);
+  }
+
+  private BufferedImage getResizedHttpResponseContent(String sourceContentType,
+      String targetContentType, String imageName, Integer width, Integer height, Integer quality,
+      boolean noExpand)
+      throws Exception {
     HttpResponse originalResponse = getImageResponse(sourceContentType, getImageBytes(imageName));
-    HttpRequest request = getMockRequest(width, height, quality);
+    HttpRequest request = getMockRequest(width, height, quality, noExpand);
 
     mockControl.replay();
     HttpResponse rewrittenResponse = rewriter.rewrite(request, originalResponse);
@@ -109,12 +118,13 @@
     return ImageIO.read(rewrittenResponse.getResponse());
   }
 
-  private HttpRequest getMockRequest(Integer width, Integer height, Integer quality) {
+  private HttpRequest getMockRequest(Integer width, Integer height, Integer quality, boolean noExpand) {
     HttpRequest request = mockControl.createMock(HttpRequest.class);
     expect(request.getUri()).andReturn(IMAGE_URL);
     expect(request.getParamAsInteger(PARAM_RESIZE_QUALITY)).andReturn(quality);
     expect(request.getParamAsInteger(PARAM_RESIZE_WIDTH)).andReturn(width);
     expect(request.getParamAsInteger(PARAM_RESIZE_HEIGHT)).andReturn(height);
+    expect(request.getParam(PARAM_NO_EXPAND)).andReturn(noExpand ? "true" : null).anyTimes();
     return request;
   }
 
@@ -235,10 +245,18 @@
     assertEquals(120, image.getWidth());
     assertEquals(60, image.getHeight());
   }
+  
+  public void testResize_noExpandImage() throws Exception {
+    BufferedImage image = getResizedHttpResponseContent(
+        CONTENT_TYPE_GIF, CONTENT_TYPE_PNG /* still optimized */,
+        EXPAND_IMAGE, 120, 60, null, true /* no expand */);
+    assertEquals(60, image.getWidth());
+    assertEquals(30, image.getHeight());
+  }
 
   public void testResize_refuseHugeInputImages() throws Exception {
     HttpResponse originalResponse = getImageResponse(CONTENT_TYPE_GIF, getImageBytes(HUGE_IMAGE));
-    HttpRequest request = getMockRequest(120, 60, null);
+    HttpRequest request = getMockRequest(120, 60, null, false);
     mockControl.replay();
     HttpResponse rewrittenResponse = rewriter.rewrite(request, originalResponse);
     mockControl.verify();
@@ -248,7 +266,7 @@
   public void testResize_acceptServeHugeImages() throws Exception {
     byte[] imageBytes = getImageBytes(HUGE_IMAGE);
     HttpResponse originalResponse = getImageResponse(CONTENT_TYPE_GIF, imageBytes);
-    HttpRequest request = getMockRequest(null, null, null);
+    HttpRequest request = getMockRequest(null, null, null, false);
     mockControl.replay();
     HttpResponse rewrittenResponse = rewriter.rewrite(request, originalResponse);
     mockControl.verify();