Thumbnails把图片压缩到nK

使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤用一行代码就完成了。

<code>//一般针对文件处理,把一个源文件处理后输出到另一个文件
Thumbnails.of("aaa.jpg")
.size(400, 800)
.outputFormat("png")
.toFile("d:/bbb.png");/<code>

它可以实现如下常用图片处理功能:

  1. 指定大小(宽X高)进行缩放
  2. 按比例缩放
  3. 宽高不变调整图片质量
  4. 添加水印
  5. 旋转变换
  6. 图片格式转换
  7. 裁剪等

但是,生产环境常用的场景是,收集拍照图片上传,现在收集像素越来越高,一不留神就很大。

图片大小不能超过指定Xk,所以我们得稍微加工一下。

利用递归方法,循环处理图片,直到达到我们要求的大小。

<code>//初始缩放大小为不缩放,1 

File tempFile=scaleImageAuto(srcFile, 1);/<code>

引入maven依赖:

<code><dependency>
\t\t <groupid>net.coobird/<groupid>
\t\t <artifactid>thumbnailator/<artifactid>
\t\t <version>0.4.8/<version>
/<dependency>/<code>
<code>/**
\t * 递归缩小大图,直到达到指定精度
\t * 返回缩放比例
\t * @throws IOException
\t * **/
\tpublic static File scaleImageAuto(final File srcFile, float scale) throws IOException{
\t\tfloat srcSize=srcFile.length()/1024f;
\t\tif(srcSize<=MIN_IMAGE_SIZE || Math.abs(MIN_IMAGE_SIZE-srcSize)<=SCALE_ABS){
\t\t\tlog.debug("文件大小符合规范!");
\t\t\treturn srcFile;
\t\t}
\t\tif(srcSize>MAX_IMAGE_SIZE){
\t\t\tlog.debug("文件太大,不处理!");
\t\t\treturn srcFile;
\t\t}
\t\tDecimalFormat df2 = new DecimalFormat("0.00");
\t\t//创建临时目标文件
\t\tFile destFile=File.createTempFile(df2.format(scale)+srcFile.getName().replace(IMAGE_TYPE, ""),
IMAGE_TYPE);
\t\tThumbnails.of(srcFile)
\t\t.scale(scale)
\t\t.outputQuality(0.8f)
\t\t.toFile(destFile);
\t\t
\t\t//程序退出自动删除临时文件
\t\tdestFile.deleteOnExit();
\t\treturn scaleImageAuto(destFile, scale-SCALE_STEP);
}/<code>


分享到:


相關文章: