Java tutorial
package org.elfinder.servlets.commands; import com.mortennobel.imagescaling.ResampleOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.logging.Level; import javax.imageio.ImageIO; import org.apache.commons.io.FilenameUtils; import org.apache.log4j.Logger; import org.elfinder.servlets.ConnectorException; import org.elfinder.servlets.FileActionEnum; /** * @author l.ciocci ASK srl * @date 23 ott. 2012 * @version $Id$ * @license BSD * @description: this class implmentes image resize,crop and rotate function */ public class ResizeCommand extends AbstractCommandOverride { private static Logger logger = Logger.getLogger(ResizeCommand.class); @Override public void execute() throws ConnectorException { File dirCurrent = getExistingDir(getParam("current"), FileActionEnum.WRITE); if (dirCurrent != null) { String targethash = (String) getParamObject("target"); File fileTarget = getExistingFile(targethash, dirCurrent, FileActionEnum.WRITE); String mode = (String) getParamObject("mode"); if (mode.equals("resize")) { int with = Integer.parseInt((String) getParamObject("width")); int height = Integer.parseInt((String) getParamObject("height")); ResampleOp resampleOp = new ResampleOp(with, height); BufferedImage origImage; try { origImage = ImageIO.read(fileTarget); String ext = FilenameUtils.getExtension(fileTarget.getName()); BufferedImage rescaledImage = resampleOp.filter(origImage, null); ImageIO.write(rescaledImage, ext, fileTarget); } catch (IOException rescaleEx) { java.util.logging.Logger.getLogger(ResizeCommand.class.getName()).log(Level.SEVERE, null, rescaleEx); } } else if (mode.equals("crop")) { int width = Integer.parseInt((String) getParamObject("width")); int height = Integer.parseInt((String) getParamObject("height")); int x = Integer.parseInt((String) getParamObject("x")); int y = Integer.parseInt((String) getParamObject("y")); BufferedImage origImage; try { origImage = ImageIO.read(fileTarget); String ext = FilenameUtils.getExtension(fileTarget.getName()); BufferedImage cropImage = origImage.getSubimage(x, y, width, height); ImageIO.write(cropImage, ext, fileTarget); } catch (IOException cropEx) { java.util.logging.Logger.getLogger(ResizeCommand.class.getName()).log(Level.SEVERE, null, cropEx); } } else if (mode.equals("rotate")) { BufferedImage origImage; int degree = Integer.parseInt((String) getParamObject("degree")); System.out.println("Degree: " + degree); try { origImage = ImageIO.read(fileTarget); String ext = FilenameUtils.getExtension(fileTarget.getName()); /* TODO: check affinetransfor for correct feature about rotation now rotation working only 90 degrees by 90 degrees*/ /* Some trouble with AffineTransform AffineTransform tx = new AffineTransform(); tx.rotate(Math.toRadians(degree), origImage.getWidth()/2, origImage.getHeight()/2); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); BufferedImage rotateImage = op.filter(origImage, null); */ ImageIO.write(rotateCw(origImage), ext, fileTarget); } catch (IOException cropEx) { java.util.logging.Logger.getLogger(ResizeCommand.class.getName()).log(Level.SEVERE, null, cropEx); } } _content(dirCurrent, true); } } /** * Rotation function: this could be better!!! Rotation point by point not so * fast but work well. * * @param BufferedImage */ private BufferedImage rotateCw(BufferedImage img) { int width = img.getWidth(); int height = img.getHeight(); BufferedImage newImage = new BufferedImage(height, width, img.getType()); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { newImage.setRGB(height - 1 - j, i, img.getRGB(i, j)); } } return newImage; } }