From d2742b36de7fc3f629913359c9a6dab77d2a1364 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Sun, 7 Feb 2010 18:47:59 +0100 Subject: [PATCH] Fixed test cases that failed on JDK 1.6.0_17 (something's up with the JPEG encoding/default BG color of transparent images...). --- .../ImageServletResponseImplTestCase.java | 61 ++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/twelvemonkeys-servlet/src/test/java/com/twelvemonkeys/servlet/image/ImageServletResponseImplTestCase.java b/twelvemonkeys-servlet/src/test/java/com/twelvemonkeys/servlet/image/ImageServletResponseImplTestCase.java index 231ec787..fd5456c8 100755 --- a/twelvemonkeys-servlet/src/test/java/com/twelvemonkeys/servlet/image/ImageServletResponseImplTestCase.java +++ b/twelvemonkeys-servlet/src/test/java/com/twelvemonkeys/servlet/image/ImageServletResponseImplTestCase.java @@ -1,5 +1,6 @@ package com.twelvemonkeys.servlet.image; +import com.twelvemonkeys.image.ImageUtil; import com.twelvemonkeys.io.FileUtil; import com.twelvemonkeys.servlet.OutputStreamAdapter; import org.jmock.Mock; @@ -165,11 +166,31 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase { assertTrue("Content has no data", out.size() > 0); // Test that image data is still readable + /* + File tempFile = File.createTempFile("imageservlet-test-", ".jpeg"); + FileOutputStream stream = new FileOutputStream(tempFile); + out.writeTo(stream); + stream.close(); + System.err.println("open " + tempFile); + */ + BufferedImage outImage = ImageIO.read(new ByteArrayInputStream(out.toByteArray())); assertNotNull(outImage); assertEquals(IMAGE_DIMENSION_PNG.width, outImage.getWidth()); assertEquals(IMAGE_DIMENSION_PNG.height, outImage.getHeight()); - assertSimilarImage(ImageIO.read(mContext.getResource("/" + IMAGE_NAME_PNG)), outImage, 96f); + + BufferedImage image = flatten(ImageIO.read(mContext.getResource("/" + IMAGE_NAME_PNG)), Color.BLACK); + + /* + tempFile = File.createTempFile("imageservlet-test-", ".png"); + stream = new FileOutputStream(tempFile); + ImageIO.write(image, "PNG", stream); + stream.close(); + System.err.println("open " + tempFile); + */ + + // JPEG compression trashes the image completely... + assertSimilarImage(image, outImage, 144f); } @Test @@ -200,11 +221,46 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase { assertTrue("Content has no data", out.size() > 0); // Test that image data is still readable + /* + File tempFile = File.createTempFile("imageservlet-test-", ".jpeg"); + FileOutputStream stream = new FileOutputStream(tempFile); + out.writeTo(stream); + stream.close(); + System.err.println("open " + tempFile); + */ + BufferedImage outImage = ImageIO.read(new ByteArrayInputStream(out.toByteArray())); assertNotNull(outImage); assertEquals(IMAGE_DIMENSION_GIF.width, outImage.getWidth()); assertEquals(IMAGE_DIMENSION_GIF.height, outImage.getHeight()); - assertSimilarImage(ImageIO.read(mContext.getResource("/" + IMAGE_NAME_GIF)), outImage, 96f); + + BufferedImage image = flatten(ImageIO.read(mContext.getResource("/" + IMAGE_NAME_GIF)), Color.WHITE); + + /* + tempFile = File.createTempFile("imageservlet-test-", ".png"); + stream = new FileOutputStream(tempFile); + ImageIO.write(image, "PNG", stream); + stream.close(); + System.err.println("open " + tempFile); + */ + + assertSimilarImage(image, outImage, 96f); + } + + private static BufferedImage flatten(final BufferedImage pImage, final Color pBackgroundColor) { + BufferedImage image = ImageUtil.toBuffered(pImage, BufferedImage.TYPE_INT_ARGB); + + Graphics2D g = image.createGraphics(); + try { + g.setComposite(AlphaComposite.DstOver); + g.setColor(pBackgroundColor); + g.fillRect(0, 0, pImage.getWidth(), pImage.getHeight()); + } + finally { + g.dispose(); + } + + return image; } /** @@ -261,6 +317,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase { assertNotNull(outImage); assertEquals(image.getWidth(), outImage.getWidth()); assertEquals(image.getHeight(), outImage.getHeight()); + assertSimilarImage(image, outImage, 0); } // TODO: Test with AOI attributes (rename thes to source-region?)