[jboss-cvs] jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace ...
Shane Bryzak
Shane_Bryzak at symantec.com
Thu Dec 21 21:50:24 EST 2006
User: sbryzak2
Date: 06/12/21 21:50:24
Modified: examples/seamspace/src/org/jboss/seam/example/seamspace
ContentServlet.java
Log:
support image rescaling
Revision Changes Path
1.4 +56 -8 jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentServlet.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ContentServlet.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/ContentServlet.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- ContentServlet.java 21 Dec 2006 13:05:01 -0000 1.3
+++ ContentServlet.java 22 Dec 2006 02:50:24 -0000 1.4
@@ -1,11 +1,16 @@
package org.jboss.seam.example.seamspace;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
import java.io.IOException;
+import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.swing.ImageIcon;
import org.jboss.seam.Component;
@@ -20,6 +25,11 @@
private static final String IMAGES_PATH = "/images";
+ /**
+ * The maximum width allowed for image rescaling
+ */
+ private static final int MAX_IMAGE_WIDTH = 1024;
+
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
@@ -28,12 +38,50 @@
{
ContentLocal contentAction = (ContentLocal) Component.getInstance(ContentAction.class);
- MemberImage img = contentAction.getImage(Integer.parseInt(request.getParameter("id")));
+ MemberImage mi = contentAction.getImage(Integer.parseInt(request.getParameter("id")));
+
+ if (mi != null)
+ {
+ response.setContentType(mi.getContentType());
+
+ boolean rescale = false;
+ int width = 0;
+ ImageIcon icon = null;
- if (img != null)
+ // Check if the image needs to be rescaled
+ if (request.getParameter("width") != null)
{
- response.setContentType(img.getContentType());
- response.getOutputStream().write(img.getData());
+ width = Math.min(MAX_IMAGE_WIDTH, Integer.parseInt(request
+ .getParameter("width")));
+ icon = new ImageIcon(mi.getData());
+ if (width > 0 && width != icon.getIconWidth())
+ rescale = true;
+ }
+
+ // Rescale the image if required
+ if (rescale)
+ {
+ double ratio = (double) width / icon.getIconWidth();
+ int height = (int) (icon.getIconHeight() * ratio);
+ BufferedImage bImg = new BufferedImage(width, height,
+ BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g2d = bImg.createGraphics();
+ g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
+ RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+ g2d.drawImage(icon.getImage(), 0, 0, width, height, null);
+ g2d.dispose();
+ String formatName = "";
+
+ if ("image/png".equals(mi.getContentType()))
+ formatName = "png";
+ else if ("image/jpeg".equals(mi.getContentType()))
+ formatName = "jpg";
+
+ ImageIO.write(bImg, formatName, response.getOutputStream());
+ }
+ else
+ response.getOutputStream().write(mi.getData());
+
response.getOutputStream().flush();
}
}
More information about the jboss-cvs-commits
mailing list