当前位置 博文首页 > RemainderTime:工具方法(一)- java等比例缩放图片大小(完美
业务需求:对大于200kb的图片进行等比例缩放到100kb以内
注: 等比例缩放图片大小方法在第(3)步
//对大于200kb的图片进行等比例缩放到100kb以内
public void compressionImg(){
...
//原图片路径
String oldUrl = "D:/xx.jpg"
//缩放后图片路径
String newUrl= "D:/xx_s.jpg"
File file =new File(old);
if(file.isFile()){
//获取图片大小
long length = file.length();
//将字节转换为kb
float v = this.bytes2kb(length);
log.info("图片大小:"+v+"kb");
}
if(v>=200){
//等比例缩放图片 指定宽度缩放像素 500px
reduceImg(oldUrl,newUrl,500);
}
}
/**
* 获取图片大小 kb
*
* @param bytes 字节
* @return
*/
public float bytes2kb(long bytes) {
BigDecimal filesize = new BigDecimal(bytes);
BigDecimal kilobyte = new BigDecimal(1024);
float returnValue = filesize.divide(kilobyte, 2, BigDecimal.ROUND_UP)
.floatValue();
return returnValue;
}
/**
* 等比率缩放
* @param imgsrc 原图片路径
* @param imgdist 缩放图片路径
* @param widthdist 指定缩放宽度
*/
public static void reduceImg(String imgsrc, String imgdist, int widthdist) {
try {
File srcfile = new File(imgsrc);
if (!srcfile.exists()) {
return;
}
//获取图片对象
Image src = javax.imageio.ImageIO.read(srcfile);
//获取缩放比率因子,保留2位小数
double factor = new BigDecimal((float)widthdist/src.getWidth(null)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//获取缩放后的高度
double height = src.getHeight(null)*factor;
//缓存图片对象
BufferedImage tag= new BufferedImage((int) widthdist, (int) height,
BufferedImage.TYPE_INT_RGB);
//绘制图片
tag.getGraphics().drawImage(src.getScaledInstance(widthdist, (int) height, Image.SCALE_SMOOTH), 0, 0, null);
//获取输入流对象
FileOutputStream out = new FileOutputStream(imgdist);
//图片编码器
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
cs