如何使用Java給您的圖片瘦身之Thumbnailator技術(shù)
前言
在我們的日常企業(yè)應(yīng)用開發(fā)當(dāng)中,會碰到很多的圖片素材訪問的場景。比如社交類應(yīng)用,您會在朋友圈中存放大量的圖片,還有一些在線旅游或者直播的行業(yè),那些圖片資源更是不勝枚舉,試想我們的用戶在移動端或者網(wǎng)頁端上傳了一張512KB的圖片,如果我們在后臺沒有加以處理就直接丟給前端展示,那對企業(yè)的帶寬和流量來說,無疑是一個巨大的災(zāi)難。因此,隨著訪問人數(shù)的越來越多,存儲圖片的數(shù)量也越來越大,我們一定要對圖片進(jìn)行相應(yīng)的瘦身,減少它在網(wǎng)絡(luò)上傳輸?shù)拇笮?,也能提高系統(tǒng)的訪問速度。
由此,本文將重點介紹在Java后臺開發(fā)應(yīng)用當(dāng)中,使用thumbnailator來進(jìn)行圖片資源的裁剪、縮小等瘦身操作,通過Java實際編碼的方式加上實際圖片的裁剪能實操,讓您了解掌握thumbnailator瘦身方法。
一、Thumbnailator概況
1、Thumbnailator是什么?
Thumbnailator 是一個用來生成圖像縮略圖的 Java 類庫,通過很簡單的代碼即可生成圖片縮略圖,也可直接對一整個目錄的圖片生成縮略圖。
2、Thumbnailator能做什么?
Thumbnailator是一款高性能的java縮略圖類庫。支持的處理操作:圖片縮放,區(qū)域裁剪,水印,旋轉(zhuǎn),保持比例。
3、Thumbnailator 的github地址
Thumbnailator是托管在github上的一個開源項目,github地址為:thumbnailator github地址
二、Thumbnailator具體使用步驟
1、使用Maven構(gòu)建,在Pom.xml中引入相關(guān)資源
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
2、創(chuàng)建一個指定高為160和寬為160的縮略圖
Thumbnails.of(new File("E:/ys/IMG_4004.JPG"))
.size(160, 160)
.toFile(new File("E:/ys/IMG_4004_160.JPG"));注意:Thumbnails.of 也可以直接接受一個String類型的文件路徑,而不需要傳入一個File。這兩種形式都是Thumbnails支持的參數(shù)。原圖是5184*3456的5.51MB的照片


按照160*160裁剪后,生成的結(jié)果圖已經(jīng)變得非常小了,大小只占2.5kb,為什么這里的高度不是160呢?你可以思考一下,主要是因為裁剪時為了保持等比率縮小,因此就變成了107.

3、按比例縮放
@Test
public void test() throws IOException {
Thumbnails.of("E:/ys/IMG_4004.JPG")
.scale(0.5)
.toFile("E:/ys/IMG_4004_scale0.5.jpg");
}這里可以明顯的看到這里得到的結(jié)果圖片的高度和寬度都是原來的一半。scale參數(shù)的值從0-1,中間可以取小數(shù),表示百分比的意思。比如這里設(shè)置為0.5表示,表示高度和寬度按照50%來進(jìn)行縮放。

4、按照圖片質(zhì)量裁剪
組件支持按照最終結(jié)果的質(zhì)量進(jìn)行縮放,通過設(shè)置outputQuality(d),d為一個0-1的值,也是一個百分比的數(shù)值。下面的代碼表示圖片大小保持不變,輸出質(zhì)量為原來的50%。
@Test
public void test3() throws IOException {
Thumbnails.of("E:/ys/IMG_4004.JPG")
.scale(1f)
.outputQuality(0.3f)
.toFile("E:/ys/IMG_4004_s1q0.3.jpg");
}
4、旋轉(zhuǎn)和添加水印效果
下面是thumbnails在旋轉(zhuǎn)和質(zhì)量輸出的比例控制,旋轉(zhuǎn)使用角度來進(jìn)行表示。

@Test
public void test8() throws IOException {
BufferedImage watermarkImage = ImageIO.read(new File("E:/ys/yl.jpg"));
Thumbnails.of(new File("E:/ys/IMG_4004.JPG"))
.scale(0.5f)
.rotate(180)//旋轉(zhuǎn)180度
.watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)
.toFile(new File("E:/ys/IMG_4004_90.JPG"));
}
上圖生成出來的結(jié)果就是原圖旋轉(zhuǎn)了180度,然后在生成的圖片的右下角添加一個水印的效果。
其它更多API和例子可以參考:官方示例

三、總結(jié)
以上就是今天要講解的所有內(nèi)容,本文將重點介紹在Java后臺開發(fā)應(yīng)用當(dāng)中,使用thumbnailator來進(jìn)行圖片資源的裁剪、縮小、旋轉(zhuǎn)、添加水印等基礎(chǔ)的裁剪操作,通過Java實際編碼的方式對實際圖片進(jìn)行裁剪,讓您了解并掌握thumbnailator瘦身方法。
到此這篇關(guān)于如何使用Java給您的圖片瘦身之Thumbnailator技術(shù)的文章就介紹到這了,更多相關(guān)Java Thumbnailator給圖片瘦身內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析
這篇文章主要介紹了SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
maven倉庫中心mirrors配置多個下載中心(執(zhí)行最快的鏡像)
這篇文章主要介紹了maven倉庫中心mirrors配置多個下載中心(執(zhí)行最快的鏡像),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Resilience4J通過yml設(shè)置circuitBreaker的方法
Resilience4j是一個輕量級、易于使用的容錯庫,其靈感來自Netflix Hystrix,但專為Java 8和函數(shù)式編程設(shè)計,這篇文章主要介紹了Resilience4J通過yml設(shè)置circuitBreaker的方法,需要的朋友可以參考下2022-10-10
SpringMVC中@controllerAdvice注解的詳細(xì)解釋
剛接觸SpringMVC應(yīng)該很少會見到這個注解,其實它的作用非常大,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@controllerAdvice注解的相關(guān)資料,需要的朋友可以參考下2022-02-02
Springboot?hibernate-validator?6.x快速校驗示例代碼
這篇文章主要介紹了Springboot?hibernate-validator?6.x校驗,本文以6.2.1.Final版本為例解決了log4j版本的漏洞問題,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
SpringBoot+Tess4j實現(xiàn)牛的OCR識別工具的示例代碼
這篇文章主要介紹了SpringBoot+Tess4j實現(xiàn)牛的OCR識別工具的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

