tons of changes
[org.ibex.xt.git] / src / org / ibex / xt / ImageConverter.java
index 49af984..7d1c942 100644 (file)
@@ -5,77 +5,64 @@
 
 package org.ibex.xt;
 
-import java.awt.Dimension;
+import java.awt.*;
+import java.awt.image.*;
+import org.ibex.util.*;
 import java.io.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
-import magick.ImageInfo;
-import magick.MagickImage;
 
-public class ImageConverter extends HttpServlet
-{
+public class ImageConverter extends HttpServlet {
 
-    public ImageConverter()
-    {
-    }
-
-    public void init(ServletConfig servletconfig)
-    {
-        cx = servletconfig.getServletContext();
-    }
+    public ImageConverter() { }
 
+    public void init(ServletConfig servletconfig) { cx = servletconfig.getServletContext(); }
     public void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
-        throws IOException, ServletException
-    {
-        doGet(httpservletrequest, httpservletresponse);
-    }
+        throws IOException, ServletException { doGet(httpservletrequest, httpservletresponse); }
 
-    public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
-        throws IOException, ServletException
-    {
-        try
-        {
-            if(httpservletrequest.getServletPath().indexOf("..") != -1)
-                throw new IOException(".. not allowed in image paths");
-            String s = cx.getRealPath(httpservletrequest.getServletPath());
+    public void doGet(HttpServletRequest req, HttpServletResponse resp)
+        throws IOException, ServletException {
+        try {
+            if (req.getServletPath().indexOf("..") != -1) throw new IOException(".. not allowed in image paths");
+            String s = cx.getRealPath(req.getServletPath());
             String s1 = s.indexOf('.') != -1 ? s.substring(0, s.lastIndexOf('.')) : s;
             File file = new File((new StringBuilder()).append(s1).append(".png").toString());
-            if(!file.exists())
-                file = new File((new StringBuilder()).append(s1).append(".xcf").toString());
-            if(!file.exists())
-                file = new File((new StringBuilder()).append(s1).append(".gif").toString());
-            if(!file.exists())
-                file = new File((new StringBuilder()).append(s1).append(".jpeg").toString());
-            System.out.println((new StringBuilder()).append("path is ").append(file.getAbsolutePath()).toString());
-            ImageInfo imageinfo = new ImageInfo(file.getAbsolutePath());
-            imageinfo.setColorspace(12);
-            imageinfo.setSubimage(0);
-            MagickImage magickimage = new MagickImage(imageinfo);
-            Dimension dimension = magickimage.getDimension();
-            int i = (int)dimension.getWidth();
-            int j = (int)dimension.getHeight();
-            String s2 = httpservletrequest.getParameter("width");
-            String s3 = httpservletrequest.getParameter("height");
-            if(s2 != null && s3 != null)
-                magickimage = magickimage.sampleImage(Integer.parseInt(s2), Integer.parseInt(s3));
-            else
-            if(s2 != null)
-            {
-                int k = Integer.parseInt(s2);
-                magickimage = magickimage.sampleImage(k, (k * j) / i);
-            } else
-            if(s3 != null)
-            {
-                int l = Integer.parseInt(s3);
-                magickimage = magickimage.sampleImage((i * l) / j, l);
+            if (!file.exists()) file = new File((new StringBuilder()).append(s1).append(".psd").toString());
+            if (!file.exists()) file = new File((new StringBuilder()).append(s1).append(".gif").toString());
+            if (!file.exists()) file = new File((new StringBuilder()).append(s1).append(".jpeg").toString());
+            if (file.getAbsolutePath().endsWith(".gif")) {
+                resp.setContentType("image/gif");
+                // FIXME slow
+                resp.getOutputStream().write(InputStreamToByteArray.convert(new FileInputStream(file)));
+            } else if (file.getAbsolutePath().endsWith(".jpeg")) {
+                resp.setContentType("image/jpeg");
+                // FIXME slow
+                resp.getOutputStream().write(InputStreamToByteArray.convert(new FileInputStream(file)));
+            } else if (file.getAbsolutePath().endsWith(".png")) {
+                resp.setContentType("image/png");
+                // FIXME slow
+                resp.getOutputStream().write(InputStreamToByteArray.convert(new FileInputStream(file)));
+            } else if (file.getAbsolutePath().endsWith(".psd")) {
+                PSDReader psdr = new PSDReader();
+                psdr.read(new FileInputStream(file));
+                Image img = psdr.getImage();
+                if (req.getParameter("height") != null) {
+                    int height = Integer.parseInt(req.getParameter("height"));
+                    int width = (img.getWidth(null) * height) / img.getHeight(null);
+                    img = ((BufferedImage)img).getScaledInstance(width, height, Image.SCALE_SMOOTH);
+                }
+                System.out.println("bufferedimage is " + img);
+                if (!(img instanceof BufferedImage)) {
+                    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+                    bi.getGraphics().drawImage(img, 0, 0, null);
+                    img = bi;
+                }
+                PngEncoderB pngenc = new PngEncoderB((BufferedImage)img, true);
+                resp.setContentType("image/png");
+                // FIXME slow
+                resp.getOutputStream().write(pngenc.pngEncode(true));
             }
-            magickimage.setImageFormat("png");
-            byte abyte0[] = magickimage.imageToBlob(imageinfo);
-            httpservletresponse.setContentType("image/png");
-            httpservletresponse.getOutputStream().write(abyte0);
-        }
-        catch(Exception exception)
-        {
+        } catch(Exception exception) {
             exception.printStackTrace();
             throw new ServletException(exception);
         }