背景說明:最近項目中需要用到一些圖片文件的上傳 ,但是有些圖片很大,比如輪播圖,大有的有幾兆,這樣加載一個首頁都要很久,顯然這樣對用戶體驗是非常不友好的,對服務器資源將是一種浪費。
為了解決這個問題,我也是在網上找了好久,看了很多資料,功夫不負有心人,最終找到了一個處理圖片十分棒的開源框架。特此拿出來與大家分享。
簡介:圖片處理是當今軟件開發中非常重要的一環,然而處理圖片的開源框架卻並不多。現金網上流傳的Java處理圖片的代碼,雖然可對圖片進行簡單處理,但效果並不理想。雖然也有些其他解決方案,但都擺脫不了繁瑣,使用起來十分不方便。
Thumbnailator 是一個優秀的圖片處理的Google開源Java類庫。處理效果遠比Java API的好。從API提供現有的圖像文件和圖像對象的類中簡化了處理過程
Thumbnailator官網:http://code.google.com/p/thumbnailator/
首先添加依賴:
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
壓縮方法:
public static void thumbnail(MultipartFile file) {
String originalFilename = file.getOriginalFilename(); //原文件名
String ext = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);//獲取后綴
String name = UUID.randomUUID().toString().replaceAll("-", "");//新文件名
try {
//先壓縮並保存圖片
Thumbnails.of(file.getInputStream()).scale(1.00f) //壓縮尺寸 范圍(0.00--1.00)
.outputQuality(0.50f) //壓縮質量 范圍(0.00--1.00)
.outputFormat(ext) //輸出圖片后綴
.toFile("D:\\var\\images\\" + name); //輸出路徑
} catch (IOException e) {
log.error(e.getMessage());
}
}
原圖大小:2.6MB


壓縮后大小:314KB


壓縮質量我調的是0.50,反正我是沒有看出來有啥區別的。google的這個工具真牛B
補充:如果圖片背景是透明的,壓縮圖片后背景會變黑,質量也不好。這個問題也是后期我測試發現的,然后查找資料找到了解決辦法,如下:
Thumbnails.of(file.getInputStream()).imageType(BufferedImage.TYPE_INT_ARGB) //解決透明背景變黑問題
.scale(1.00f) //壓縮尺寸 范圍(0.00--1.00)
.outputQuality(quality) //壓縮質量 范圍(0.00--1.00)
.outputFormat(ext) //輸出圖片后綴
.toFile(result); //輸出路徑
