Thumbnails把圖片壓縮到nK

使用Thumbnails工具類能幫助我們對圖片進行很好的處理,Thumbnails對圖片的操作進行了很好的封裝,往往很複雜的步驟用一行代碼就完成了。

<code>//一般針對文件處理,把一個源文件處理後輸出到另一個文件
Thumbnails.of("aaa.jpg")
.size(400, 800)
.outputFormat("png")
.toFile("d:/bbb.png");/<code>

它可以實現如下常用圖片處理功能:

指定大小(寬X高)進行縮放按比例縮放寬高不變調整圖片質量添加水印旋轉變換圖片格式轉換裁剪等

但是,生產環境常用的場景是,收集拍照圖片上傳,現在收集像素越來越高,一不留神就很大。

圖片大小不能超過指定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>