Fixed a bug related to transcoding images with indexed color (ie. GIF) to JPEG.

Thanks to Rune Bremnes for pointing it out and providing a patch and sample image!
This commit is contained in:
Harald Kuhr 2009-12-03 15:29:38 +01:00
parent 64b21b83bb
commit c7fd5b3dd9
3 changed files with 125 additions and 72 deletions

View File

@ -131,9 +131,9 @@ class ImageServletResponseImpl extends HttpServletResponseWrapper implements Ima
* @param pMimeType the content (MIME) type
*/
public void setContentType(final String pMimeType) {
// Throw exception is allready set
// Throw exception is already set
if (mOriginalContentType != null) {
throw new IllegalStateException("ContentType allready set.");
throw new IllegalStateException("ContentType already set.");
}
mOriginalContentType = pMimeType;
@ -187,17 +187,13 @@ class ImageServletResponseImpl extends HttpServletResponseWrapper implements Ima
getImage();
}
// This is stupid, but don't know how to work around...
// TODO: Test what types of images that work with JPEG, consider reporting it as a bug
// For known formats that don't support transparency, convert to opaque
if (("image/jpeg".equals(outputType) || "image/jpg".equals(outputType)
|| "image/bmp".equals(outputType) || "image/x-bmp".equals(outputType)) &&
mImage instanceof BufferedImage && ((BufferedImage) mImage).getType() == BufferedImage.TYPE_INT_ARGB) {
mImage.getColorModel().getTransparency() != Transparency.OPAQUE) {
mImage = ImageUtil.toBuffered(mImage, BufferedImage.TYPE_INT_RGB);
}
//System.out.println("Writing image, content-type: " + getContentType(outputType));
//System.out.println("Writing image, outputType: " + outputType);
//System.out.println("Writing image: " + mImage);
if (mImage != null) {
Iterator writers = ImageIO.getImageWritersByMIMEType(outputType);
if (writers.hasNext()) {
@ -218,10 +214,6 @@ class ImageServletResponseImpl extends HttpServletResponseWrapper implements Ima
ImageOutputStream stream = ImageIO.createImageOutputStream(out);
//System.out.println("-ISR- Image: " + mImage);
//System.out.println("-ISR- ImageWriter: " + writer);
//System.out.println("-ISR- ImageOutputStream: " + stream);
writer.setOutput(stream);
try {
writer.write(null, new IIOImage(mImage, null, null), param);
@ -233,12 +225,10 @@ class ImageServletResponseImpl extends HttpServletResponseWrapper implements Ima
finally {
writer.dispose();
out.flush();
// out.close();
}
}
else {
mContext.log("ERROR: No writer for content-type: " + outputType);
// sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to encode image: No writer for content-type " + outputType);
throw new IIOException("Unable to transcode image: No suitable image writer found (content-type: " + outputType + ").");
}
}
@ -365,8 +355,6 @@ class ImageServletResponseImpl extends HttpServletResponseWrapper implements Ima
// Fill bgcolor behind image, if transparent
extractAndSetBackgroundColor(image);
//System.out.println("-ISR- Image: " + image);
// Set image
mImage = image;
}

View File

@ -26,13 +26,17 @@ import java.util.Arrays;
public class ImageServletResponseImplTestCase extends MockObjectTestCase {
private static final String CONTENT_TYPE_BMP = "image/bmp";
private static final String CONTENT_TYPE_FOO = "foo/bar";
private static final String CONTENT_TYPE_GIF = "image/gif";
private static final String CONTENT_TYPE_JPEG = "image/jpeg";
private static final String CONTENT_TYPE_PNG = "image/png";
private static final String CONTENT_TYPE_TEXT = "text/plain";
private static final String IMAGE_NAME = "12monkeys-splash.png";
private static final String IMAGE_NAME_PNG = "12monkeys-splash.png";
private static final String IMAGE_NAME_GIF = "tux.gif";
private static final Dimension IMAGE_DIMENSION_PNG = new Dimension(300, 410);
private static final Dimension IMAGE_DIMENSION_GIF = new Dimension(250, 250);
private static final Dimension IMAGE_DIMENSION = new Dimension(300, 410);
private HttpServletRequest mRequest;
private ServletContext mContext;
@ -43,15 +47,17 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
Mock mockRequest = mock(HttpServletRequest.class);
mockRequest.stubs().method("getAttribute").will(returnValue(null));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
mRequest = (HttpServletRequest) mockRequest.proxy();
Mock mockContext = mock(ServletContext.class);
mockContext.stubs().method("getResource").with(eq("/" + IMAGE_NAME)).will(returnValue(getClass().getResource(IMAGE_NAME)));
mockContext.stubs().method("log").withAnyArguments(); // Just supress the logging
mockContext.stubs().method("getResource").with(eq("/" + IMAGE_NAME_PNG)).will(returnValue(getClass().getResource(IMAGE_NAME_PNG)));
mockContext.stubs().method("getResource").with(eq("/" + IMAGE_NAME_GIF)).will(returnValue(getClass().getResource(IMAGE_NAME_GIF)));
mockContext.stubs().method("log").withAnyArguments(); // Just suppress the logging
mockContext.stubs().method("getMimeType").with(eq("file.bmp")).will(returnValue(CONTENT_TYPE_BMP));
mockContext.stubs().method("getMimeType").with(eq("file.foo")).will(returnValue(CONTENT_TYPE_FOO));
mockContext.stubs().method("getMimeType").with(eq("file.gif")).will(returnValue(CONTENT_TYPE_GIF));
mockContext.stubs().method("getMimeType").with(eq("file.jpeg")).will(returnValue(CONTENT_TYPE_JPEG));
mockContext.stubs().method("getMimeType").with(eq("file.png")).will(returnValue(CONTENT_TYPE_PNG));
mockContext.stubs().method("getMimeType").with(eq("file.txt")).will(returnValue(CONTENT_TYPE_TEXT));
@ -98,11 +104,11 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(mRequest, response, mContext);
fakeResponse(mRequest, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
assertEquals(IMAGE_DIMENSION.width, image.getWidth());
assertEquals(IMAGE_DIMENSION.height, image.getHeight());
assertEquals(IMAGE_DIMENSION_PNG.width, image.getWidth());
assertEquals(IMAGE_DIMENSION_PNG.height, image.getHeight());
// Flush image to wrapped response
imageResponse.flush();
@ -136,7 +142,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
assertTrue("Content has no data", out.size() > 0);
// Test that image data is untouched
assertTrue("Data differs", Arrays.equals(FileUtil.read(getClass().getResourceAsStream(IMAGE_NAME)), out.toByteArray()));
assertTrue("Data differs", Arrays.equals(FileUtil.read(getClass().getResourceAsStream(IMAGE_NAME_PNG)), out.toByteArray()));
}
// Transcode original PNG to JPEG with no other changes
@ -161,8 +167,67 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
// Test that image data is still readable
BufferedImage outImage = ImageIO.read(new ByteArrayInputStream(out.toByteArray()));
assertNotNull(outImage);
assertEquals(IMAGE_DIMENSION.width, outImage.getWidth());
assertEquals(IMAGE_DIMENSION.height, outImage.getHeight());
assertEquals(IMAGE_DIMENSION_PNG.width, outImage.getWidth());
assertEquals(IMAGE_DIMENSION_PNG.height, outImage.getHeight());
assertSimilarImage(ImageIO.read(mContext.getResource("/" + IMAGE_NAME_PNG)), outImage, 96f);
}
@Test
public void testTranscodeResponseIndexedCM() throws IOException {
// Custom setup
Mock mockRequest = mock(HttpServletRequest.class);
mockRequest.stubs().method("getAttribute").will(returnValue(null));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_GIF));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
Mock mockResponse = mock(HttpServletResponse.class);
mockResponse.expects(once()).method("setContentType").with(eq(CONTENT_TYPE_JPEG));
ByteArrayOutputStream out = new ByteArrayOutputStream();
mockResponse.expects(once()).method("getOutputStream").will(returnValue(new OutputStreamAdapter(out)));
HttpServletResponse response = (HttpServletResponse) mockResponse.proxy();
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Force transcode to JPEG
imageResponse.setOutputContentType("image/jpeg");
// Flush image to wrapped response
imageResponse.flush();
assertTrue("Content has no data", out.size() > 0);
// Test that image data is still readable
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);
}
/**
* Makes sure images are the same, taking JPEG artifacts into account.
*
* @param pExpected the expected image
* @param pActual the actual image
* @param pArtifactThreshold the maximum allowed difference between the expected and actual pixel value
*/
private void assertSimilarImage(final BufferedImage pExpected, final BufferedImage pActual, final float pArtifactThreshold) {
for (int y = 0; y < pExpected.getHeight(); y++) {
for (int x = 0; x < pExpected.getWidth(); x++) {
int original = pExpected.getRGB(x, y);
int actual = pActual.getRGB(x, y);
// Multiply in the alpha component
float alpha = ((original >> 24) & 0xff) / 255f;
assertEquals(alpha * ((original >> 16) & 0xff), (actual >> 16) & 0xff, pArtifactThreshold);
assertEquals(alpha * ((original >> 8) & 0xff), (actual >> 8) & 0xff, pArtifactThreshold);
assertEquals(alpha * ((original) & 0xff), actual & 0xff, pArtifactThreshold);
}
}
}
public void testReplaceResponse() throws IOException {
@ -175,7 +240,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(mRequest, response, mContext);
fakeResponse(mRequest, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
@ -298,7 +363,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").withAnyArguments().will(returnValue(null));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -311,7 +376,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
assertEquals(sourceRegion.width, image.getWidth());
@ -337,7 +402,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").withAnyArguments().will(returnValue(null));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -350,7 +415,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
assertEquals(sourceRegion.width, image.getWidth());
@ -379,7 +444,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI_UNIFORM)).will(returnValue(true));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -392,24 +457,24 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
assertEquals(sourceRegion.width, image.getWidth());
assertEquals(sourceRegion.height, image.getHeight());
BufferedImage original = ImageIO.read(getClass().getResource(IMAGE_NAME));
BufferedImage original = ImageIO.read(getClass().getResource(IMAGE_NAME_PNG));
// Sanity check
assertNotNull(original);
assertEquals(IMAGE_DIMENSION.width, original.getWidth());
assertEquals(IMAGE_DIMENSION.height, original.getHeight());
assertEquals(IMAGE_DIMENSION_PNG.width, original.getWidth());
assertEquals(IMAGE_DIMENSION_PNG.height, original.getHeight());
// Center
sourceRegion.setLocation(
(int) Math.round((IMAGE_DIMENSION.width - sourceRegion.getWidth()) / 2.0),
(int) Math.round((IMAGE_DIMENSION.height - sourceRegion.getHeight()) / 2.0)
(int) Math.round((IMAGE_DIMENSION_PNG.width - sourceRegion.getWidth()) / 2.0),
(int) Math.round((IMAGE_DIMENSION_PNG.height - sourceRegion.getHeight()) / 2.0)
);
// Test that we have exactly the pixels we should
@ -442,7 +507,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI_UNIFORM)).will(returnValue(true));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -455,49 +520,49 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
// Flush image to wrapped response
imageResponse.flush();
imageResponse.flush();
assertTrue("Image wider than bounding box", IMAGE_DIMENSION.width >= image.getWidth());
assertTrue("Image taller than bounding box", IMAGE_DIMENSION.height >= image.getHeight());
assertTrue("Image not maximized to bounding box", IMAGE_DIMENSION.width == image.getWidth() || IMAGE_DIMENSION.height == image.getHeight());
assertTrue("Image wider than bounding box", IMAGE_DIMENSION_PNG.width >= image.getWidth());
assertTrue("Image taller than bounding box", IMAGE_DIMENSION_PNG.height >= image.getHeight());
assertTrue("Image not maximized to bounding box", IMAGE_DIMENSION_PNG.width == image.getWidth() || IMAGE_DIMENSION_PNG.height == image.getHeight());
// Above tests that one of the sides equal, we now need to test that the other follows aspect
double destAspect = sourceRegion.getWidth() / sourceRegion.getHeight();
double srcAspect = IMAGE_DIMENSION.getWidth() / IMAGE_DIMENSION.getHeight();
double srcAspect = IMAGE_DIMENSION_PNG.getWidth() / IMAGE_DIMENSION_PNG.getHeight();
if (srcAspect >= destAspect) {
// Dst is narrower than src
assertEquals(IMAGE_DIMENSION.height, image.getHeight());
assertEquals(IMAGE_DIMENSION_PNG.height, image.getHeight());
assertEquals(
"Image width does not follow aspect",
Math.round(IMAGE_DIMENSION.getHeight() * destAspect), image.getWidth()
Math.round(IMAGE_DIMENSION_PNG.getHeight() * destAspect), image.getWidth()
);
}
else {
// Dst is wider than src
assertEquals(IMAGE_DIMENSION.width, image.getWidth());
assertEquals(IMAGE_DIMENSION_PNG.width, image.getWidth());
assertEquals(
"Image height does not follow aspect",
Math.round(IMAGE_DIMENSION.getWidth() / destAspect), image.getHeight()
Math.round(IMAGE_DIMENSION_PNG.getWidth() / destAspect), image.getHeight()
);
}
BufferedImage original = ImageIO.read(getClass().getResource(IMAGE_NAME));
BufferedImage original = ImageIO.read(getClass().getResource(IMAGE_NAME_PNG));
// Sanity check
assertNotNull(original);
assertEquals(IMAGE_DIMENSION.width, original.getWidth());
assertEquals(IMAGE_DIMENSION.height, original.getHeight());
assertEquals(IMAGE_DIMENSION_PNG.width, original.getWidth());
assertEquals(IMAGE_DIMENSION_PNG.height, original.getHeight());
// Center
sourceRegion.setLocation(
(int) Math.round((IMAGE_DIMENSION.width - image.getWidth()) / 2.0),
(int) Math.round((IMAGE_DIMENSION.height - image.getHeight()) / 2.0)
(int) Math.round((IMAGE_DIMENSION_PNG.width - image.getWidth()) / 2.0),
(int) Math.round((IMAGE_DIMENSION_PNG.height - image.getHeight()) / 2.0)
);
sourceRegion.setSize(image.getWidth(), image.getHeight());
@ -526,7 +591,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").withAnyArguments().will(returnValue(null));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -539,7 +604,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
@ -549,10 +614,10 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
// Above tests that one of the sides equal, we now need to test that the other follows aspect
if (size.width == image.getWidth()) {
assertEquals(Math.round(size.getWidth() * IMAGE_DIMENSION.getWidth() / IMAGE_DIMENSION.getHeight()), image.getHeight());
assertEquals(Math.round(size.getWidth() * IMAGE_DIMENSION_PNG.getWidth() / IMAGE_DIMENSION_PNG.getHeight()), image.getHeight());
}
else {
assertEquals(Math.round(size.getHeight() * IMAGE_DIMENSION.getWidth() / IMAGE_DIMENSION.getHeight()), image.getWidth());
assertEquals(Math.round(size.getHeight() * IMAGE_DIMENSION_PNG.getWidth() / IMAGE_DIMENSION_PNG.getHeight()), image.getWidth());
}
// Flush image to wrapped response
@ -576,7 +641,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE_UNIFORM)).will(returnValue(false));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -589,7 +654,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
assertEquals(size.width, image.getWidth());
@ -618,7 +683,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -631,7 +696,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
@ -658,7 +723,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
assertEquals(image.getWidth(), outImage.getWidth());
assertEquals(image.getHeight(), outImage.getHeight());
}
@Test
public void testReadWithSourceRegionAndNonUniformResize() throws IOException {
Rectangle sourceRegion = new Rectangle(100, 100, 200, 200);
@ -670,7 +735,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE_UNIFORM)).will(returnValue(false));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -683,7 +748,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
assertEquals(size.width, image.getWidth());
@ -713,7 +778,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -726,7 +791,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
@ -774,7 +839,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -787,7 +852,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);
@ -839,7 +904,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_AOI)).will(returnValue(sourceRegion));
mockRequest.stubs().method("getAttribute").with(eq(ImageServletResponse.ATTRIB_SIZE)).will(returnValue(size));
mockRequest.stubs().method("getContextPath").will(returnValue("/ape"));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME));
mockRequest.stubs().method("getRequestURI").will(returnValue("/ape/" + IMAGE_NAME_PNG));
mockRequest.stubs().method("getParameter").will(returnValue(null));
HttpServletRequest request = (HttpServletRequest) mockRequest.proxy();
@ -852,7 +917,7 @@ public class ImageServletResponseImplTestCase extends MockObjectTestCase {
ImageServletResponseImpl imageResponse = new ImageServletResponseImpl(request, response, mContext);
fakeResponse(request, imageResponse);
// Make sure image is correctly loaedd
// Make sure image is correctly loaded
BufferedImage image = imageResponse.getImage();
assertNotNull(image);

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB