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();