自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

強(qiáng)大!Spring Boot 圖片處理工具,實(shí)現(xiàn)縮放,水印,旋轉(zhuǎn)等功能僅需一行代碼

開發(fā) 開發(fā)工具
在Web項(xiàng)目開發(fā)中,對(duì)用戶上傳的圖片進(jìn)行處理是非常有必要的。對(duì)于圖片的處理,常見的需求包括縮放、添加水印等。

環(huán)境:SpringBoot3.2.5

1. 簡(jiǎn)介

在Web項(xiàng)目開發(fā)中,對(duì)用戶上傳的圖片進(jìn)行處理是非常有必要的。對(duì)于圖片的處理,常見的需求包括縮放、添加水印等。

縮放功能可以根據(jù)實(shí)際需求調(diào)整圖片的大小,以適應(yīng)不同的顯示場(chǎng)景。通過合理的縮放,不僅可以節(jié)省存儲(chǔ)空間,還能提升加載速度,優(yōu)化用戶體驗(yàn)。

水印功能則是一種有效的版權(quán)保護(hù)手段。通過在圖片上添加文字或圖標(biāo)水印,可以明確標(biāo)識(shí)圖片的歸屬和來源,防止被惡意盜用。

在Java環(huán)境中創(chuàng)建高質(zhì)量的縮略圖可能頗具挑戰(zhàn)性,要求開發(fā)者掌握Image I/O API、Java 2D API以及圖像處理和縮放技術(shù)等復(fù)雜知識(shí)。然而,你無需為此擔(dān)憂!本篇文章將介紹一個(gè)非常牛逼的開源組件Thumbnailator。

Thumbnailator的流暢接口(Fluent Interface)可以用來在一步簡(jiǎn)單的操作中完成相當(dāng)復(fù)雜的縮略圖處理任務(wù)。

準(zhǔn)備環(huán)境,引入如下依賴:

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

不依賴其它,只需引入該包即可完整各種復(fù)雜的圖片出來。

2. 實(shí)戰(zhàn)案例

2.1 創(chuàng)建縮略圖

Thumbnails
  .of(new File("d:\\images\\7.png"))
  .size(160, 160)
  .toFile(new File("d:\\images\\output\\7.png")) ;

該示例中,將原圖大小縮放到160 * 160 然后輸出到output目錄下。最終圖片對(duì)比如下:

圖片

雖然給定的縮放大小都是160,但是最終生成的是等比例的大小,但是不會(huì)超過160。

2.2 添加水印

Thumbnails.of(new File("d:\\images\\7.png")) 
  .size(200, 200)
  .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("d:\\images\\water.png")), 0.5f)
  .outputQuality(0.8)
  .toFile(new File("d:\\images\\output\\7_watermark.png"));

在該示例中,首先調(diào)整了圖片大小,接著在右下角放置一個(gè)半透明的水印,最后以80%的壓縮質(zhì)量設(shè)置保存為7_watermark.png。最終生成效果:

圖片

2.3 旋轉(zhuǎn)圖片

Thumbnails.of(new File("d:\\images\\7.png"))
  .scale(1)
  .rotate(180)
  .toFile(new File("d:\\images\\output\\7_rotate.png"));

該示例中,我們將圖片旋轉(zhuǎn)了180°,最終效果:

圖片

2.4 強(qiáng)制縮略圖大小

在上面的示例中,我們指定了縮放圖片的大小,但是最終生成的圖片還是等比例的,這樣的結(jié)果是寬或高不會(huì)高出指定的大小,并沒有嚴(yán)格的限定在指定的大小。

Thumbnails.of(new File("d:\\images\\7.png"))
  .size(200, 200)
  .keepAspectRatio(false)
  .toFile(new File("d:\\images\\output\\7_keepratio.png"));

最終生成的效果:

圖片

嚴(yán)格按照指定的大小生成圖片。你也可以如下操作

Thumbnails.of(new File("d:\\images\\7.png"))
  .forceSize(200, 200)
  .toFile(new File("d:\\images\\output\\7_keepratio.png"));

同樣能按照指定的大小輸出。

2.5 通過指定的因子縮放

Thumbnails.of(new File("d:\\images\\7.png"))
  .scale(0.25)
  .toFile(new File("d:\\images\\output\\7_scale.png"));

通過scale方法設(shè)置縮放的比,最終效果:

圖片

2.6 批量生成縮略圖

我們一次性可以出來多個(gè)圖片,并指定輸出的目錄。

File destinationDir = new File("d:\\images\\output");
Thumbnails.of("d:\\images\\1.png", "d:\\images\\2.png", "d:\\images\\3.png")
  .size(200, 200)
  .toFiles(destinationDir, Rename.PREFIX_DOT_THUMBNAIL);

該示例將1,2,3圖片一次性按照設(shè)置生成縮略圖,然后輸出到output目錄下,效果如下:

圖片

這里生成縮略圖的命名策略是自動(dòng)在原文件名前添加thumbnail.前綴,你也可以設(shè)置為:Rename.NO_CHANGE,這樣圖片將按照原文件名輸出。

2.7 與Spring Boot整合

我們這里演示一個(gè)圖片上傳后生成縮略圖進(jìn)行輸出的示例。

@PostMapping("/upload")
public void upload(MultipartFile file, HttpServletResponse response) throws Exception {
  InputStream is = file.getInputStream() ;
  BufferedImage bi = Thumbnails.of(is)
    .size(200, 200)
    .asBufferedImage() ;
  
  response.setContentType("image/png");
  response.setHeader("Content-Disposition", "inline; filename=image.png");


  ImageIO.write(bi, "png", response.getOutputStream()) ;
}

該示例中,將上傳的圖片進(jìn)行縮放后,返回BufferedImage對(duì)象,直接直接將該對(duì)象進(jìn)行輸出,最終效果:

圖片圖片

責(zé)任編輯:武曉燕 來源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2023-01-12 08:07:03

Python代碼版權(quán)

2010-03-09 19:19:40

Python圖像處理

2025-03-11 03:00:00

2020-08-19 10:30:25

代碼Python多線程

2024-05-31 14:04:18

2020-09-28 12:34:38

Python代碼開發(fā)

2023-09-21 15:10:55

2022-04-09 09:11:33

Python

2016-12-02 08:53:18

Python一行代碼

2022-05-13 09:36:06

Python水印命令

2025-04-27 03:00:00

Spring集成測(cè)試

2021-04-22 11:27:24

Python命令水印

2021-11-05 06:57:50

架構(gòu)工具代碼

2020-02-21 16:51:58

前端可視化傳染病

2021-09-16 14:22:06

微軟WinUI 2.7InfoBadge

2016-11-09 18:41:47

PHP圖片存儲(chǔ)yii

2019-04-24 16:12:59

iOSSiriMacOS

2013-11-12 10:46:04

ChromeChrome32 be

2023-11-07 07:07:23

2023-10-06 19:21:49

Initializr應(yīng)用Spring
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)