偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

環(huán)境:SpringBoot3.2.5

1. 簡(jiǎn)介

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

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

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

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

Thumbnailator的流暢接口(Fluent Interface)可以用來(lái)在一步簡(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ù)雜的圖片出來(lái)。

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ì)超過(guò)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ì)高出指定的大小,并沒(méi)有嚴(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 通過(guò)指定的因子縮放

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

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

圖片

2.6 批量生成縮略圖

我們一次性可以出來(lái)多個(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é)任編輯:武曉燕 來(lái)源: 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

2025-06-18 10:05:26

2020-08-19 10:30:25

代碼Python多線程

2024-05-31 14:04:18

2020-09-28 12:34:38

Python代碼開(kāi)發(fā)

2023-09-21 15:10:55

2022-04-09 09:11:33

Python

2016-12-02 08:53:18

Python一行代碼

2021-04-22 11:27:24

Python命令水印

2021-09-16 14:22:06

微軟WinUI 2.7InfoBadge

2022-05-13 09:36:06

Python水印命令

2025-04-27 03:00:00

Spring集成測(cè)試

2020-02-21 16:51:58

前端可視化傳染病

2016-11-09 18:41:47

PHP圖片存儲(chǔ)yii

2021-11-05 06:57:50

架構(gòu)工具代碼

2023-11-07 07:07:23

2021-06-08 11:31:11

WineWaylandVulkan

2021-02-04 17:04:22

Python編程語(yǔ)言代碼
點(diǎn)贊
收藏

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