最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot2.x 整合 thumbnailator 圖片處理的示例代碼

 更新時(shí)間:2020年10月12日 08:21:48   作者:淼淼之森  
這篇文章主要介紹了SpringBoot2.x 之整合 thumbnailator 圖片處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1、序

在實(shí)際項(xiàng)目中,有時(shí)為了響應(yīng)速度,難免會(huì)對(duì)一些高清圖片進(jìn)行一些處理,比如圖片壓縮之類的,而其中壓縮可能就是最為常見(jiàn)的。最近,阿淼就被要求實(shí)現(xiàn)這個(gè)功能,原因是客戶那邊嫌速度過(guò)慢。借此機(jī)會(huì),阿淼今兒就給大家介紹一些一下我做這個(gè)功能時(shí)使用的 Thumbnailator 庫(kù)。

Thumbnailator 是一個(gè)優(yōu)秀的圖片處理的 Google 開(kāi)源 Java 類庫(kù),專門用來(lái)生成圖像縮略圖的,通過(guò)很簡(jiǎn)單的 API 調(diào)用即可生成圖片縮略圖,也可直接對(duì)一整個(gè)目錄的圖片生成縮略圖。兩三行代碼就能夠從現(xiàn)有圖片生成處理后的圖片,且允許微調(diào)圖片的生成方式,同時(shí)保持了需要寫(xiě)入的最低限度的代碼量。可毫不夸張的說(shuō),它是一個(gè)處理圖片十分棒的開(kāi)源框架。

支持:圖片縮放,區(qū)域裁剪,水印,旋轉(zhuǎn),保持比例。

Thumbnailator 官網(wǎng):https://code.google.com/p/thumbnailator/

有了這玩意,就不用在費(fèi)心思使用 Image I/O API,Java 2D API 等等來(lái)生成縮略圖了。

廢話少說(shuō),直接上代碼,先來(lái)看一個(gè)最簡(jiǎn)單的例子:

2、代碼示例

2.1. 新建一個(gè)springboot項(xiàng)目

2.2. 引入依賴 thumbnailator

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

2.3. controller

主要實(shí)現(xiàn)了如下幾個(gè)接口作為測(cè)試:

@RestController
public class ThumbnailsController {
	@Resource
	private IThumbnailsService thumbnailsService;

	/**
	 * 指定大小縮放
	 * @param resource
	 * @param width
	 * @param height
	 * @return
	 */
	@GetMapping("/changeSize")
	public String changeSize(MultipartFile resource, int width, int height) {
		return thumbnailsService.changeSize(resource, width, height);
	}

	/**
	 * 指定比例縮放
	 * @param resource
	 * @param scale
	 * @return
	 */
	@GetMapping("/changeScale")
	public String changeScale(MultipartFile resource, double scale) {
		return thumbnailsService.changeScale(resource, scale);
	}

	/**
	 * 添加水印 watermark(位置,水印,透明度)
	 * @param resource
	 * @param p
	 * @param shuiyin
	 * @param opacity
	 * @return
	 */
	@GetMapping("/watermark")
	public String watermark(MultipartFile resource, Positions p, MultipartFile shuiyin, float opacity) {
		return thumbnailsService.watermark(resource, Positions.CENTER, shuiyin, opacity);
	}

	/**
	 * 圖片旋轉(zhuǎn) rotate(度數(shù)),順時(shí)針旋轉(zhuǎn)
	 * @param resource
	 * @param rotate
	 * @return
	 */
	@GetMapping("/rotate")
	public String rotate(MultipartFile resource, double rotate) {
		return thumbnailsService.rotate(resource, rotate);
	}

	/**
	 * 圖片裁剪
	 * @param resource
	 * @param p
	 * @param width
	 * @param height
	 * @return
	 */
	@GetMapping("/region")
	public String region(MultipartFile resource, Positions p, int width, int height) {
		return thumbnailsService.region(resource, Positions.CENTER, width, height);
	}
}

3、功能實(shí)現(xiàn)

其實(shí)引入了這個(gè) Thumbnailator 類庫(kù)后,代碼其實(shí)很少,因?yàn)槲覀冎恍枰凑找?guī)則調(diào)用其 API 來(lái)實(shí)現(xiàn)即可。就個(gè)人而言,挺喜歡這種 API 的方式,簡(jiǎn)潔,易懂,明了。

3.1 指定大小縮放

/**
 * 指定大小縮放 若圖片橫比width小,高比height小,放大 
 * 若圖片橫比width小,高比height大,高縮小到height,圖片比例不變
 * 若圖片橫比width大,高比height小,橫縮小到width,圖片比例不變 
 * 若圖片橫比width大,高比height大,圖片按比例縮小,橫為width或高為height
 * 
 * @param resource 源文件路徑
 * @param width  寬
 * @param height 高
 * @param tofile 生成文件路徑
 */
public static void changeSize(String resource, int width, int height, String tofile) {
	try {
		Thumbnails.of(resource).size(width, height).toFile(tofile);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

測(cè)試:

3.2 指定比例縮放

/**
 * 指定比例縮放 scale(),參數(shù)小于1,縮小;大于1,放大
 * 
 * @param resource 源文件路徑
 * @param scale  指定比例
 * @param tofile  生成文件路徑
 */
public static void changeScale(String resource, double scale, String tofile) {
	try {
		Thumbnails.of(resource).scale(scale).toFile(tofile);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

測(cè)試:

3.3 添加水印

/**
 * 添加水印 watermark(位置,水印,透明度)
 * 
 * @param resource 源文件路徑
 * @param p   水印位置
 * @param shuiyin 水印文件路徑
 * @param opacity 水印透明度
 * @param tofile 生成文件路徑
 */
public static void watermark(String resource, Positions p, String shuiyin, float opacity, String tofile) {
	try {
		Thumbnails.of(resource).scale(1).watermark(p, ImageIO.read(new File(shuiyin)), opacity).toFile(tofile);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

測(cè)試:

3.4 圖片旋轉(zhuǎn)

/**
 * 圖片旋轉(zhuǎn) rotate(度數(shù)),順時(shí)針旋轉(zhuǎn)
 * 
 * @param resource 源文件路徑
 * @param rotate 旋轉(zhuǎn)度數(shù)
 * @param tofile 生成文件路徑
 */
public static void rotate(String resource, double rotate, String tofile) {
	try {
		Thumbnails.of(resource).scale(1).rotate(rotate).toFile(tofile);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

測(cè)試:

3.5 圖片裁剪

/**
 * 圖片裁剪 sourceRegion()有多種構(gòu)造方法,示例使用的是sourceRegion(裁剪位置,寬,高)
 * 
 * @param resource 源文件路徑
 * @param p   裁剪位置
 * @param width  裁剪區(qū)域?qū)?
 * @param height 裁剪區(qū)域高
 * @param tofile 生成文件路徑
 */
public static void region(String resource, Positions p, int width, int height, String tofile) {
	try {
		Thumbnails.of(resource).scale(1).sourceRegion(p, width, height).toFile(tofile);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

測(cè)試:

說(shuō)明:

1.keepAspectRatio(boolean arg0) 圖片是否按比例縮放(寬高比保持不變)默認(rèn) true

2.outputQuality(float arg0) 圖片質(zhì)量

3.outputFormat(String arg0) 格式轉(zhuǎn)換

小結(jié)

值得注意的是,若 png、gif 格式圖片中含有透明背景,使用該工具壓縮處理后背景會(huì)變成黑色,這是 Thumbnailator 的一個(gè) bug,預(yù)計(jì)后期版本會(huì)解決。

代碼地址 :https://github.com/mmzsblog/mmzsblog-util/

到此這篇關(guān)于SpringBoot2.x 之整合 thumbnailator 圖片處理的文章就介紹到這了,更多相關(guān)SpringBoot2.x  圖片處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用idea里面自帶的翻譯插件

    如何使用idea里面自帶的翻譯插件

    這篇文章主要介紹了idea里面自帶的翻譯插件,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java快速排序和選擇排序?qū)崿F(xiàn)實(shí)例解析

    java快速排序和選擇排序?qū)崿F(xiàn)實(shí)例解析

    這篇文章主要為大家介紹了java快速排序和選擇排序?qū)崿F(xiàn)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • IDEA自定義Maven archetype的方法步驟

    IDEA自定義Maven archetype的方法步驟

    在創(chuàng)建Maven的項(xiàng)目時(shí)我們發(fā)現(xiàn)了一個(gè)很不方便的問(wèn)題,就是每次創(chuàng)建Maven的工程的時(shí)候,都需要選擇一個(gè)骨架,本文主要介紹了IDEA自定義Maven archetype的方法步驟,感興趣的可以了解一下
    2022-03-03
  • JAVA 使用正則提取A標(biāo)簽以及href鏈接

    JAVA 使用正則提取A標(biāo)簽以及href鏈接

    這篇文章主要介紹了JAVA 使用正則提取A標(biāo)簽以及href鏈接的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • HashMap方法之Map.getOrDefault()解讀及案例

    HashMap方法之Map.getOrDefault()解讀及案例

    這篇文章主要介紹了HashMap方法之Map.getOrDefault()解讀及案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 通過(guò)實(shí)例解析Java不可變對(duì)象原理

    通過(guò)實(shí)例解析Java不可變對(duì)象原理

    這篇文章主要介紹了通過(guò)實(shí)例解析Java不可變對(duì)象原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java中Supplier知識(shí)點(diǎn)總結(jié)

    java中Supplier知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于java中Supplier知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • m1 Mac設(shè)置多jdk版本并動(dòng)態(tài)切換的實(shí)現(xiàn)

    m1 Mac設(shè)置多jdk版本并動(dòng)態(tài)切換的實(shí)現(xiàn)

    本文主要介紹 Mac 下如何安裝 JDK 并且多版本如何切換,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 解決IDEA啟動(dòng)springboot項(xiàng)目報(bào)錯(cuò)java.lang.ClassNotFoundException:?javax.servlet.ServletContext

    解決IDEA啟動(dòng)springboot項(xiàng)目報(bào)錯(cuò)java.lang.ClassNotFoundException:?jav

    這篇文章主要介紹了解決IDEA啟動(dòng)springboot項(xiàng)目報(bào)錯(cuò)java.lang.ClassNotFoundException:?javax.servlet.ServletContext問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java實(shí)現(xiàn)一個(gè)簡(jiǎn)易聊天室流程

    Java實(shí)現(xiàn)一個(gè)簡(jiǎn)易聊天室流程

    這篇文章主要介紹了我的java課程設(shè)計(jì)一個(gè)多人聊天室(socket+多線程)本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11

最新評(píng)論

金塔县| 阿图什市| 遂宁市| 光泽县| 桑日县| 喀喇沁旗| 通许县| 尉氏县| 永兴县| 德庆县| 鄄城县| 长丰县| 阳信县| 烟台市| 新蔡县| 林口县| 博野县| 江达县| 桓台县| 南江县| 尤溪县| 高清| 唐山市| 石棉县| 嘉善县| 仙游县| 阳信县| 讷河市| 万盛区| 永春县| 刚察县| 南昌县| 农安县| 信阳市| 东城区| 苍山县| 津南区| 长岛县| 祁连县| 勃利县| 汝城县|