[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