1. 程式人生 > >【工作點滴】——thumbnailator實現圖片的壓縮和裁切

【工作點滴】——thumbnailator實現圖片的壓縮和裁切

       我們在工作中常常會遇到圖片處理的功能。有很多的工具類都可以實現。今天給大家推薦一個特別簡單好用的類——Thumbnailator。Thumbnailator是一個優秀的圖片處理的開源Java類庫,用起來十分簡單。下面跟大家介紹一下他的使用方法。

一、引jar包

2.  maven引入jar包

<dependency>  
    <groupId>net.coobird</groupId>  
    <artifactId>thumbnailator</artifactId>  
    <version>0.4.5</version>  
</dependency>  

二、簡單使用舉例

為了方便大家的檢視,把我的import也給大家展示一下:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.Thumbnails.Builder;
import org.junit.Test;

我們可以直接寫個單元測試類,也可以直接寫個java類,直接執行就可以。

我的程式碼均在這個方法體內執行:

@Test
	public void testHandlePicture() throws IOException {

  }

先建立原始圖片目錄
File fromPic = new File("src/picture/yuan.jpg");
BufferedImage image = ImageIO.read(fromPic); 
//得到圖片的高和寬
int imageWidth = image.getWidth();  
int imageHeitht = image.getHeight(); 

建立結果圖片的輸出目錄及名稱

File toPic = new File("src/picture/result.jpg");

1.按指定尺寸對圖片進行縮放,如果圖片不符合400*500,會遵循原圖按比例縮放到400*某個高度

Thumbnails.of(fromPic).size(400, 500).toFile(toPic);

2.按比例進行放大和縮小,會遵循原圖比例放大或縮小相應的倍數,scale為倍數設定

Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按比例縮小  
Thumbnails.of(fromPic).scale(2f).toFile(toPic);//按比例放大


3.按照指定的尺寸進行縮放,不遵循原圖大小
Thumbnails.of(fromPic).size(100, 100).keepAspectRatio(false).toFile(toPic); 

keepAspectRatio屬性:在沒有設定 keepaspectratio 選項時, 給定圖形的高度(全部高度)和寬度會導致圖形被不對稱縮 放來滿足所設定的高和寬。在設定 keepaspectratio  選項後,給定圖形的高度(全部高度)和寬度時,圖形會 保持原有的寬高比例,儘可能使得圖形滿足所設定的高和寬, 但是圖形不會超出其中任一個。

保持圖片大小不超過650*900,會盡可能滿足所設定的高和寬。

Thumbnails.of(fromPic).size(650, 900).keepAspectRatio(true).toFile(fromPic);

4.旋轉圖片,totate為旋轉角度,負數則為逆時針旋轉
Thumbnails.of(fromPic).size(200,200).rotate(90).toFile(toPic); 

5.壓縮圖片大小,但不改變圖片尺寸。outputQuality引數1為最高質量
Thumbnails.of(fromPic).outputQuality(0.25f).toFile(toPic1);

6.裁剪圖片,sourceRegion裁剪屬性,Positions.CENTER表示中心裁剪300*300的大小,也可以是Positions.TOP_CENTER等其他屬性

Thumbnails.of(fromPic).sourceRegion(Positions.CENTER,300,300)  
.size(300,300).toFile(toPic); 

還可以根據座標裁剪
Thumbnails.of(fromPic).sourceRegion(0,0,200,200)  
.size(300,300).toFile(toPic); 

7,還可以改變輸出檔案的名稱和路徑,改變圖片的格式
Thumbnails.of(fromPic).scale(1f).outputFormat("png")  
.toFile("picture/png格式的圖片.png");  

8.檔案也可以輸出成BufferedImage或者OutputStream
//輸出成檔案流OutputStream  
OutputStream os=new FileOutputStream(toPic);  
Thumbnails.of(fromPic).size(120,120).toOutputStream(os);  

//輸出BufferedImage,asBufferedImage()返回BufferedImage  
BufferedImage bi=Thumbnails.of(fromPic).size(120,120).asBufferedImage();  
ImageIO.write(bi,"jpg",toPic); 

他的功能還是很強大的,使用也很簡單。希望可以幫到大家!