X-Git-Url: http://git.megacz.com/?p=org.ibex.xt.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fxt%2FImageConverter.java;h=7d1c942e089b736b7cb0ec6ef4a7e47f2761748a;hp=49af984d9f0e9ef783e00894406b96511ddc42b4;hb=e8f5044051de70a1cdad65df9c5ed6bff3cd1a08;hpb=3f3b2560f1b42d5417b8622ae66648ec042b1159 diff --git a/src/org/ibex/xt/ImageConverter.java b/src/org/ibex/xt/ImageConverter.java index 49af984..7d1c942 100644 --- a/src/org/ibex/xt/ImageConverter.java +++ b/src/org/ibex/xt/ImageConverter.java @@ -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); }