Thumbnails把图片压缩到200K以内,防止app崩溃
使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤用一行代码就完成了。//一般针对文件处理,把一个源文件处理后输出到另一个文件Thumbnails.of("aaa.jpg").size(400, 800).outputFormat("png").t...
·
使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤用一行代码就完成了。
//一般针对文件处理,把一个源文件处理后输出到另一个文件
Thumbnails.of("aaa.jpg")
.size(400, 800)
.outputFormat("png")
.toFile("d:/bbb.png");
它可以实现如下常用图片处理功能:
指定大小(宽X高)进行缩放
按比例缩放
宽高不变调整图片质量
添加水印
旋转变换
图片格式转换
裁剪等
但是,生产环境常用的场景是,收集拍照图片上传,现在手机像素越来越高,一不留神就很大。APP加载程序崩溃。
图片大小不能超过指定Xk,所以我们得稍微加工一下。
利用递归方法,循环处理图片,直到达到我们要求的大小。
//初始缩放大小为不缩放,1
File tempFile=scaleImageAuto(srcFile, 1);
引入maven依赖:
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
public static float MIN_IMAGE_SIZE=200.0f;//最小
public static float MAX_IMAGE_SIZE=100000f;//最大
public static float SCALE_STEP=0.05F;
public static float SCALE_ABS=30F;
public static String IMAGE_TYPE=".jpg";
/**
* 递归缩小大图,直到达到指定精度
* 返回缩放比例
* @throws IOException
* **/
public static File scaleImageAuto(final File srcFile, float scale) throws IOException{
float srcSize=srcFile.length()/1024f;
if(srcSize<=MIN_IMAGE_SIZE || Math.abs(MIN_IMAGE_SIZE-srcSize)<=SCALE_ABS){
log.debug("文件大小符合规范!");
return srcFile;
}
if(srcSize>MAX_IMAGE_SIZE){
log.debug("文件太大,不处理!");
return srcFile;
}
DecimalFormat df2 = new DecimalFormat("0.00");
//创建临时目标文件
File destFile=File.createTempFile(df2.format(scale)+srcFile.getName().replace(IMAGE_TYPE, ""),
IMAGE_TYPE);
Thumbnails.of(srcFile)
.scale(scale)
.outputQuality(0.8f)
.toFile(destFile);
//程序退出自动删除临时文件
destFile.deleteOnExit();
return scaleImageAuto(destFile, scale-SCALE_STEP);
}
更多推荐
已为社区贡献1条内容
所有评论(0)