通过对图片重绘,达到图片缩放、压缩编码转换功能。
Java代码
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
/**
*
* @author 梁栋
* @version 1.0
* @since 1.0
*/
public abstract class ImageUtils {
/**
* 缩放图片
*
* @param width
* 输出宽度
* @param height
* 输出高度
* @param input
* 输入流
* @param output
* 输出流
* @param format
* 输出格式
* @return
* @throws Exception
*/
public static boolean convert(int width, int height, InputStream input,
OutputStream output, String format) throws Exception {
// 输入
BufferedImage inputImage = ImageIO.read(input);
// 转换
RenderedImage im = (RenderedImage) convert(height, height, inputImage);
// 输 出
return ImageIO.write(im, format, output);
}
/**
* 转换压缩算法
*
* @param input
* 输入文件
* @param output
* 输出文件
* @return
* @throws Exception
*/
public static boolean convert(File input, File output) throws Exception {
// 输入
BufferedImage inputImage = ImageIO.read(input);
// 转换
int width = inputImage.getWidth ();
int height = inputImage.getHeight();
RenderedImage im = (RenderedImage) convert(width, height, inputImage);
String outputFilename = output.getName ();
String format = outputFilename.substring(outputFilename
.lastIndexOf('.') + 1);
// 输出
return ImageIO.write(im, format, output);
}
/**
* 缩放图片
*
* @param width
* 输出宽度
* @param height
* 输出高度
* @param input
* 输入文件
* @param output
* 输出文件
* @return
* @throws Exception
*/
public static boolean convert(int width, int height, File input, File output)
throws Exception {
// 输入
BufferedImage inputImage = ImageIO.read(input);
// 转换
RenderedImage im = (RenderedImage) convert(width, height, inputImage);
String outputFilename = output.getName();
String format = outputFilename.substring(outputFilename
.lastIndexOf('.') + 1);
// 输出
return ImageIO.write(im, format, output);
}
/**
* 缩放图片
*
* @param width
* 输出宽度
* @param height
* 输出 高度
* @param input
* 输入路径
* @param output
* 输出路径
* @return
* @throws Exception
*/
public static boolean convert(int width, int height, String inputPath,
String outputPath) throws Exception {
return convert(width, height, new File(inputPath), new File (outputPath));
}
/**
* 转换
*
* @param width
* 输出宽度
* @param height
* 输出高度
* @param input
* BufferedImage
* @return BufferedImage
* @throws Exception
*/
private static BufferedImage convert(int width, int height,
BufferedImage input) throws Exception {
// 初始化输出图片
BufferedImage output = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 重新绘图
Image image = input.getScaledInstance(output.getWidth(), output
.getHeight(), output.getType());
output.createGraphics().drawImage(image, null, null);
return output;
}
/**
* 等比缩放图片
*
* @param width
* 输出宽度
* @param height
* 输出高度
* @param input
* 输入流
* @param output
* 输出流
* @return
* @throws Exception
*/
public static boolean equimultipleConvert(int width, int height,
String input, String output) throws Exception {
return equimultipleConvert(width, height, new File(input), new File (
output));
}
/**
* 等比缩放图片
*
* @param width
* 输出宽度
* @param height
* 输出高度
* @param input
* 输入流
* @param output
* 输出流
* @return
*
* @throws Exception
*/
public static boolean equimultipleConvert(int width, int height,
File input, File output) throws Exception {
// 输入
BufferedImage image = ImageIO.read(input);
// 重新核 算尺寸
if (image.getWidth() > 0 && image.getHeight() > 0) {
if ((image.getWidth() / image.getHeight()) >= (width / height)) {
if (image.getWidth() > width) {
height = (image.getHeight() * width) / image.getWidth();
} else {
width = image.getWidth ();
height = image.getHeight();
}
} else {
if (image.getHeight() > height) {
width = (image.getWidth() * height) / image.getHeight();
} else {
width = image.getWidth();
height = image.getHeight();
}
}
}
// 转换 输出
return convert(width, height, input, output);
}
}