Java使用Thumbnails進行圖片處理:縮放、旋轉、水印、裁剪

相信小夥伴們在做網站的時候經常會遇到一些客戶提出的需求,特別實在圖片的處理上。比如,網站顯示的圖片,使用者在開啟一個網站的時候會覺得圖片載入的比較慢,希望能夠快一些。大多數情況下,我們在上傳圖片的時候是將原圖片上傳上去了,也就是圖片實際多大就會顯示多大。很多情況中,網站的圖片是非常大的,有的時候回超過10M甚至更大,那麼網頁在載入的時候當然會比較慢。那麼有沒有什麼方法既可以保證我們的圖片清晰度又可以讓我們得圖片小一些呢?這個當然有,今天我們就來說一下Thumbnails。Thumbnails不僅提供了圖片的縮放而且海鷗旋轉,加水印以及裁剪的功能,下面我們就來詳細的說一下。

一、引入Maven包

net。coobird thumbnailator 0。4。8

Java使用Thumbnails進行圖片處理:縮放、旋轉、水印、裁剪

二、具體做法

1。我自己在網路上找了一張5M的圖片。我們來看一下這個圖片的大小

Java使用Thumbnails進行圖片處理:縮放、旋轉、水印、裁剪

Java使用Thumbnails進行圖片處理:縮放、旋轉、水印、裁剪

2。呼叫下面的方法進行壓縮即可。當然了還有其他的操作,我這裡沒有詳細說明,都只是簡單的方法呼叫,相信大家能夠看的明白。

File srcPic = new File(“D:\\testdemo\\3。jpg”);//目標圖片位置-圖片源 File desPic = new File(“D:\\testdemo\\3yasuo。jpg”); //生成檔案位置 //按指定大小把圖片進行縮和放(會遵循原圖高寬比例) //此處把圖片壓成400×500的縮圖 Thumbnails。of(srcPic)。size(400,500)。toFile(desPic);//變為400*300,遵循原圖比例縮或放到400*某個高度//按照比例進行縮小和放大 Thumbnails。of(srcPic )。scale(0。2f)。toFile(desPic );//按比例縮小 Thumbnails。of(srcPic )。scale(2f);//按比例放大按指定的大小進行縮放(不遵循原圖比例)//不按比例,就按指定的大小進行縮放 Thumbnails。of(fromPic)。size(100, 100)。keepAspectRatio(false)。toFile(toPic); //或者Thumbnails。of(fromPic)。forceSize(100,100)。toFile(toPic); 圖片尺寸不變,壓縮圖片檔案大小 //圖片尺寸不變,壓縮圖片檔案大小outputQuality實現,引數1為最高質量 Thumbnails。of(fromPic)。scale(1f)。outputQuality(0。25f)。toFile(toPic);給圖片加水印//給圖片加水印,watermark(位置,水印圖,透明度)Positions。CENTER表示加在中間 Thumbnails。of(fromPic)。size(400,400) 。watermark(Positions。CENTER,ImageIO。read(waterPic),0。5f) 。outputQuality(0。8f)。toFile(toPic);轉換圖片格式 //用outputFormat(影象格式)轉換圖片格式,保持原尺寸不變 Thumbnails。of(fromPic)。scale(1f)。outputFormat(“png”) 。toFile(“picture/png格式的圖片。png”);輸出成檔案流OutputStream //輸出成檔案流 OutputStream OutputStream os=new FileOutputStream(toPic); Thumbnails。of(fromPic)。size(120,120)。toOutputStream(os);輸出成BufferedImage //輸出BufferedImage,asBufferedImage()返回BufferedImage BufferedImage bi=Thumbnails。of(fromPic)。size(120,120)。asBufferedImage(); ImageIO。write(bi,“jpg”,toPic);//壓縮至指定圖片尺寸(例如:橫400高300),保持圖片不變形,多餘部分裁剪掉(這個是引的網友的程式碼) BufferedImage image = ImageIO。read(fromPic); Builder builder = null; 壓縮至指定圖片尺寸,保持圖片不變形,多餘部分裁剪掉//壓縮至指定圖片尺寸(例如:橫400高300),保持圖片不變形,多餘部分裁剪掉(這個是引的網友的程式碼) BufferedImage image = ImageIO。read(fromPic); Builder builder = null; int imageWidth = image。getWidth(); int imageHeitht = image。getHeight(); if ((float)300 / 400 != (float)imageWidth / imageHeitht) { if (imageWidth > imageHeitht) { image = Thumbnails。of(fromPic)。height(300)。asBufferedImage(); } else { image = Thumbnails。of(fromPic)。width(400)。asBufferedImage(); } builder = Thumbnails。of(image)。sourceRegion(Positions。CENTER, 400, 300)。size(400, 300); } else { builder = Thumbnails。of(image)。size(400, 300); } builder。outputFormat(“jpg”)。toFile(toPic); //scale 引數是浮點數,大於1表示放大,小於1表示縮小//outputQuality 引數是浮點數,質量壓縮,0-1之間 //keepAspectRatio 在調整尺寸時保持比例,預設為true,如果要剪裁到特定的比例,設定為false即可 *注意:scale、width|height、size三者不能同時共存,但必須要有一個

Java使用Thumbnails進行圖片處理:縮放、旋轉、水印、裁剪