这里使用了java的javax.imageio.ImageIO类,对于不同图片的支持扩展,在java的扩展包里面:
com.sun.imageio.plugins.XXX, 其中XXX为图片格式,目前默认支持jpg,bmp,gif,png和wbmp格式,各种图片处理扩展类可以通过IIORegistry进行注册,在解析过程中,ImageIO会根据不同的格式类型寻找匹配的解析类,当然这些不需要我们去做,下面是缩小图片的代码
/**
* <p>缩小图片。</p>
* @author 刘建峰
* @param img 原始图片
* @param formatName 图片类型
* @param out 输出流
* @param length 图片长都
* @throws ImageFormatException
* @throws IOException
*/
resizeImage(Image img, String formatName,
OutputStream out, long length) throws ImageFormatException, IOException {
if (StringUtils.isEmpty(formatName)) {
return;
}
int oldWidth = img.getWidth(null);
int oldHeight = img.getHeight(null);
int newWidth = oldWidth;
int newHeight = oldHeight;
if (length > maxImageSize) {//需要对图片进行缩放,计算新图片的大小
BigDecimal scale = BigDecimal.valueOf(maxImageSize).divide(
BigDecimal.valueOf(length), 3, BigDecimal.ROUND_DOWN);
scale = BigDecimal.valueOf(Math.sqrt(scale.doubleValue()));
newWidth = BigDecimal.valueOf(newWidth).multiply(scale).intValue();
newHeight = BigDecimal.valueOf(newHeight).multiply(scale).intValue();
}
BufferedImage newImage = new BufferedImage(newWidth, newHeight,
BufferedImage.TYPE_INT_RGB);//构造一个缓冲图片对象
newImage.getGraphics().drawImage(img, 0, 0, newWidth, newHeight, null);//绘制新图像
ImageIO.write(newImage, formatName, out);将图形以format的格式写入输出流
out.close();
}