ImageUtils.java
/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.cms.impl;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.imgscalr.Scalr;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Oct 15, 2008 2:18:02 PM
*/
/**
* Process images class
*/
public class ImageUtils {
/**
* Return the image which resized(support JPG, PNG, GIF)
* @param image The BufferedImage which based on InputStream
* BufferedImage image = ImageIO.read(InputStream)
* @param maxWidth Max width of thumbnail will be resized
* @param maxHeight Max height of thumbnail will be resized
* @return InputStream
* @throws Exception
*/
public static InputStream scaleImage(BufferedImage image, int maxWidth, int maxHeight) throws Exception {
return scaleImage(image, maxWidth, maxHeight, false);
}
/**
* Return the image which resized(support JPG, PNG, GIF)
* @param image The BufferedImage which based on InputStream
* BufferedImage image = ImageIO.read(InputStream)
* @param maxWidth Max width of thumbnail will be resized
* @param maxHeight Max height of thumbnail will be resized
* @return InputStream
* @throws Exception
*/
public static InputStream scaleImage(BufferedImage image, int maxWidth, int maxHeight, boolean crop) throws Exception {
// Make sure the aspect ratio is maintained, so the image is not skewed
BufferedImage thumbImage = null;
if(crop) {
thumbImage = Scalr.crop(image, maxWidth, maxHeight);
} else {
if (maxHeight == 0) {
//Just used in custom size case. When 0 as specified as height then it will be calculated automatically to fit
//with expected width.
thumbImage = Scalr.resize(image, Scalr.Mode.FIT_TO_WIDTH, maxWidth);
} else if(maxWidth == 0) {
//Just used in custom size case. When 0 as specified as width then it will be calculated automatically to fit
//with expected height.
thumbImage = Scalr.resize(image, Scalr.Mode.FIT_TO_HEIGHT, maxHeight);
} else {
//BALANCED: Used to indicate that the scaling implementation should use a scaling operation balanced
//between SPEED and QUALITY
thumbImage = Scalr.resize(image, Scalr.Method.BALANCED, maxWidth, maxHeight);
}
}
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
ImageIO.write(thumbImage, "png", outStream);
InputStream is = new ByteArrayInputStream(outStream.toByteArray());
return is;
}
}