Author: lindner
Date: Tue Mar 16 22:30:16 2010
New Revision: 924031
URL: http://svn.apache.org/viewvc?rev=924031&view=rev
Log:
SHINDIG-1305 | Patch from Jacobo Tarrio | Round instead of truncating the
dimensions when resizing an image
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BasicImageRewriter.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.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=924031&r1=924030&r2=924031&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
Tue Mar 16 22:30:16 2010
@@ -192,10 +192,10 @@ public class BasicImageRewriter implemen
// If both image dimensions are fixed, the two-step resizing process
will need to know
// how much it has to fix up the image.
double ratio = getResizeRatio(requestedWidth, requestedHeight,
origWidth, origHeight);
- int widthAfterStep1 = max(1, (int) (ratio * origWidth));
+ int widthAfterStep1 = max(1, (int) Math.round(ratio * origWidth));
widthDelta = requestedWidth - widthAfterStep1;
- int heightAfterStep1 = max(1, (int) (ratio * origHeight));
+ int heightAfterStep1 = max(1, (int) Math.round(ratio * origHeight));
heightDelta = requestedHeight - heightAfterStep1;
if (noExpand) {
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java?rev=924031&r1=924030&r2=924031&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/ImageRewriterTest.java
Tue Mar 16 22:30:16 2010
@@ -56,6 +56,9 @@ public class ImageRewriterTest extends A
/** A 60 x 30 image whose size in bytes expands when resized to 120 x 60 */
private static final String EXPAND_IMAGE =
"org/apache/shindig/gadgets/rewrite/image/expand.gif";
+ /** A 600 x 400 image whose size used to cause trouble with rounding when
resizing to 171 x 171 */
+ private static final String RATIO_IMAGE =
"org/apache/shindig/gadgets/rewrite/image/ratio.gif";
+
/**
* This image has a huge memory footprint that the rewriter should refuse to
resize, but not
* refuse to render. The response containing this image should not be
rewritten.
@@ -292,4 +295,12 @@ public class ImageRewriterTest extends A
assertEquals(HttpResponse.SC_OK, rewrittenResponse.getHttpStatusCode());
assertTrue(Arrays.equals(imageBytes,
IOUtils.toByteArray(rewrittenResponse.getResponse())));
}
+
+ @Test
+ public void testResize_avoidFloatingPointRoundingProblems() throws Exception
{
+ BufferedImage image = getResizedHttpResponseContent(
+ CONTENT_TYPE_GIF, CONTENT_TYPE_PNG, RATIO_IMAGE, 171, 171, null, true);
+ assertEquals(171, image.getWidth());
+ assertEquals(114, image.getHeight());
+ }
}