很多应用场景下,需要进行图片压缩,以防止图片过大占用空间。本文提供图片压缩的util,即插即用。直接上代码
/**
* 压缩图片
* @param inStream 图片流
* @return byte 数组
*/
public static byte[] compressImage(InputStream inStream){
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage bufferedImage = null;
int result[] = { 0, 0 };
try {
// 从流里将图片写入缓冲图片区
bufferedImage = ImageIO.read(inStream);
// 得到源图片宽
result[0] = bufferedImage.getWidth(null);
// 得到源图片高
result[1] = bufferedImage.getHeight(null);
// 开始读取文件并进行压缩
Image image = bufferedImage;
// 构造一个类型为预定义图像类型之一的 BufferedImage
bufferedImage = new BufferedImage( result[0], result[1], BufferedImage.TYPE_INT_RGB);
// 这边是压缩的模式设置
bufferedImage.getGraphics().drawImage(image.getScaledInstance(result[0], result[1], Image.SCALE_SMOOTH), 0, 0, null);
ImageIO.write(bufferedImage, "jpg", out);
inStream.close(); //关闭输入流
} catch (Exception ef) {
ef.printStackTrace();
}
return out.toByteArray();
}
入参直接把图片以流的方式读取出来,传入即可,返回byte类型的数组。后期可根据需求进一步处理