davmail/src/java/davmail/util/IOUtil.java

146 lines
4.8 KiB
Java

/*
* DavMail POP/IMAP/SMTP/CalDav/LDAP Exchange Gateway
* Copyright (C) 2010 Mickael Guessant
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package davmail.util;
import org.apache.commons.codec.binary.Base64;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* Input output functions.
*/
public final class IOUtil {
private IOUtil() {
}
/**
* Write all inputstream content to outputstream.
*
* @param inputStream input stream
* @param outputStream output stream
* @throws IOException on error
*/
public static void write(InputStream inputStream, OutputStream outputStream) throws IOException {
byte[] bytes = new byte[8192];
int length;
while ((length = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, length);
}
}
/**
* Decode base64 input string, return byte array.
*
* @param encoded Base64 encoded string
* @return decoded content as byte arrey
* @throws IOException on error
*/
public static byte[] decodeBase64(String encoded) throws IOException {
return Base64.decodeBase64(encoded.getBytes("ASCII"));
}
/**
* Decode base64 input string, return content as UTF-8 String.
*
* @param encoded Base64 encoded string
* @return decoded content as byte arrey
* @throws IOException on error
*/
public static String decodeBase64AsString(String encoded) throws IOException {
return new String(decodeBase64(encoded), "UTF-8");
}
/**
* Base64 encode value.
*
* @param value input value
* @return base64 value
* @throws IOException on error
*/
public static String encodeBase64(String value) throws IOException {
return new String(Base64.encodeBase64(value.getBytes("UTF-8")), "ASCII");
}
/**
* Resize image bytes to a max width or height image size.
*
* @param inputBytes input image bytes
* @param max max size
* @return scaled image bytes
* @throws IOException on error
*/
public static byte[] resizeImage(byte[] inputBytes, int max) throws IOException {
BufferedImage inputImage = ImageIO.read(new ByteArrayInputStream(inputBytes));
BufferedImage outputImage = resizeImage(inputImage, max);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(outputImage, "jpg", baos);
return baos.toByteArray();
}
/**
* Resize image to a max width or height image size.
*
* @param inputImage input image
* @param max max size
* @return scaled image
*/
public static BufferedImage resizeImage(BufferedImage inputImage, int max) {
int width = inputImage.getWidth();
int height = inputImage.getHeight();
int targetWidth;
int targetHeight;
if (width <= max && height <= max) {
return inputImage;
} else if (width > height) {
targetWidth = max;
targetHeight = targetWidth * height / width;
} else {
targetHeight = max;
targetWidth = targetHeight * width / height;
}
Image scaledImage = inputImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);
BufferedImage targetImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
targetImage.getGraphics().drawImage(scaledImage, 0, 0, null);
return targetImage;
}
/**
* Read all inputStream content to a byte array.
*
* @param inputStream input stream
* @return content as byte array
* @throws IOException on error
*/
public static byte[] readFully(InputStream inputStream) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bytes = new byte[8192];
int length;
while ((length = inputStream.read(bytes)) > 0) {
baos.write(bytes, 0, length);
}
return baos.toByteArray();
}
}