Thumbnailator图片缩放
2018-03-24 15:50:51
872次阅读
0个评论
指定大小进行缩放
public class PicUtil {
public static void main(String[] args) {
PicUtil.commpressPicForSize("G:\\images\\ceshi.jpg",
"G:\\images\\datas\\ceshi.jpg", 100, 0.3); // 图片小于100kb
}
/**
* 根据指定大小和指定精度压缩图片
*
* @param srcPath
* 源图片地址
* @param desPath
* 目标图片地址
* @param desFilesize
* 指定图片大小,单位kb
* @param accuracy
* 精度,递归压缩的比率,建议小于0.9
* @return
*/
public static String commpressPicForSize(String srcPath, String desPath,
long desFileSize, double accuracy) {
if (StringUtils.isEmpty(srcPath) || StringUtils.isEmpty(srcPath)) {
return null;
}
if (!new File(srcPath).exists()) {
return null;
}
try {
File srcFile = new File(srcPath);
long srcFileSize = srcFile.length();
System.out.println("源图片:" + srcPath + ",大小:" + srcFileSize / 1024
+ "kb");
// 1、先转换成jpg
Thumbnails.of(srcPath).scale(1f).toFile(desPath);
// 递归压缩,直到目标文件大小小于desFileSize
commpressPicCycle(desPath, desFileSize, accuracy);
File desFile = new File(desPath);
System.out.println("目标图片:" + desPath + ",大小" + desFile.length()
/ 1024 + "kb");
System.out.println("图片压缩完成!");
} catch (Exception e) {
e.printStackTrace();
return null;
}
return desPath;
}
/**
* 图片压缩:按指定大小把图片进行缩放(会遵循原图高宽比例)
* 并设置图片文件大小
*/
private static void commpressPicCycle(String desPath, long desFileSize,
double accuracy) throws IOException {
File srcFileJPG = new File(desPath);
long srcFileSizeJPG = srcFileJPG.length();
// 2、判断大小,如果小于指定大小,不压缩;如果大于等于指定大小,压缩
if (srcFileSizeJPG <= desFileSize * 1024) {
return;
}
// 计算宽高
BufferedImage bim = ImageIO.read(srcFileJPG);
int srcWdith = bim.getWidth();
int srcHeigth = bim.getHeight();
int desWidth = new BigDecimal(srcWdith).multiply(
new BigDecimal(accuracy)).intValue();
int desHeight = new BigDecimal(srcHeigth).multiply(
new BigDecimal(accuracy)).intValue();
Thumbnails.of(desPath).size(desWidth, desHeight)
.outputQuality(accuracy).toFile(desPath);
commpressPicCycle(desPath, desFileSize, accuracy);
}
}
按照比例进行缩放
public class PicUtil {
public static void main(String[] args) {
PicUtil.commpressPicForScale("G:\\images\\ceshi.jpg",
"G:\\images\\scales\\ceshi.jpg", 100,0.3);
}
public static String commpressPicForScale(String srcPath, String desPath,
long desFileSize, double accuracy) {
if (StringUtils.isEmpty(srcPath) || StringUtils.isEmpty(srcPath)) {
return null;
}
if (!new File(srcPath).exists()) {
return null;
}
try {
File srcFile = new File(srcPath);
long srcFileSize = srcFile.length();
System.out.println("源图片:" + srcPath + ",大小:" + srcFileSize / 1024
+ "kb");
// 1、先转换成jpg
Thumbnails.of(srcPath).scale(1f).toFile(desPath);
//按照比例进行缩放
imgScale(desPath, desFileSize, accuracy);
File desFile = new File(desPath);
System.out.println("目标图片:" + desPath + ",大小" + desFile.length()
/ 1024 + "kb");
System.out.println("图片压缩完成!");
} catch (Exception e) {
e.printStackTrace();
return null;
}
return desPath;
}
<span style="white-space:pre;"> </span>/**
<span style="white-space:pre;"> </span>* 按照比例进行缩放
<span style="white-space:pre;"> </span>*
<span style="white-space:pre;"> </span>*/
private static void imgScale(String desPath, long desFileSize,
double accuracy) throws IOException{
File file=new File(desPath);
long fileSize=file.length();
//判断大小,如果小于指定大小,不压缩;如果大于等于指定大小,压缩
if(fileSize<=desFileSize*1024){
return;
}
//按照比例进行缩小
Thumbnails.of(desPath).scale(accuracy).toFile(desPath);//按比例缩小
System.out.println("按照比例进行缩放");
imgScale(desPath, desFileSize, accuracy);
}
}
00
相关话题
- Thumbnailator处理gif图片时java.lang.ArrayIndexOutOfBoundsException: 4096异常
- Fabric.js Filters 图片滤镜
- SImpleImage解决图片压缩变红问题
- 前端图片压缩与上传OSS组件
- jQuery.autoIMG实现图片自适应
- Fabric.js实作: 拼贴图片
- javascript判断上传的文件是否为图片
- Fabric.js实作 Node.js 上传图片及操作 Fabricjs 为图片加上浮水印
- Fabric.js实作: 自订图片裁切
- FastDFS集成Nginx并开启图片防盗链
- Java OCR使用Tess4J进行图片文字识别
- Css设置img属性让图片水平居中,居左,居右
- Fabric.js实作: 图片上传并透过拖曳进入canvas
- Vue2.0 移动端拍照压缩图片预览及上传