SpingBoot/JAVA實現給圖片加水印功能(通過thumbnailator庫)
前言
最近某專案有個加水印的需求,JAVA實現給已上傳的圖片增加水印並輸出的功能,圖片A+水印B=合成帶水印快取圖片C
(就是不需要儲存到硬碟,不佔用空間),目前網上的解決方案挺多但是挺亂,於是趁機整理了一份簡潔版供大家使用。這裡藉助了一個很強大的Thumbnails庫
。
圖片A
水印B
效果圖C
MAVEN
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<!-- https://github.com/coobird/thumbnailator -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.13</version>
</dependency>
核心程式碼
storageService.getPathString()
僅用於獲取存放圖片的目錄。storageService.getPathString()+filename
代表圖片AstorageService.getPathString()+"watermark.png"
代表水印B `BufferedImage- ` 為快取的圖片類,也就是我不需要save到file中去,這裡就藉助這個物件,如果你需要儲存,可以使用toFile();
/**
* JAVA給圖片加水印
* @author zhengkai.blog.csdn.net
* @param filename
* @param response
* @throws IOException
*/
@GetMapping("/files2/{filename:.+}")
@ResponseBody
@Async
public void serveFile2(@PathVariable String filename, HttpServletResponse response) throws IOException {
//載入要顯示的檔案
File inFile = new File(storageService.getPathString()+filename);
//載入水印檔案
File watFile = new File(storageService.getPathString()+"watermark.png");
//載入到BufferedImage中
BufferedImage originalImage = ImageIO.read(inFile);
BufferedImage waterImage = ImageIO.read(watFile);
//呼叫Thumbnails庫可參考(https://github.com/coobird/thumbnailator/wiki/Examples)
//by zhengkai.blog.csdn.net
BufferedImage thumbnail = Thumbnails.of(originalImage)
//必須設定大小,否則有size not set的ERROR
.size(600, 400)
//var3表示透明度
.watermark(Positions.BOTTOM_RIGHT, waterImage,0.2f)
//快取輸出
.asBufferedImage();
//從HttpServletResponse中獲取輸出流
OutputStream outputStream = response.getOutputStream();
//將BufferedImage轉換為InputStream
InputStream inputStream = bufferedImageToInputStream(thumbnail);
//直接COPY輸出
IOUtils.copy(inputStream, outputStream);
//清理快取
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
//輸出下載格式的圖片
/*return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\"").body(thumbnail);*/
}
/**
* JAVA給圖片加水印:將BufferedImage轉換為InputStream
* @author zhengkai.blog.csdn.net
*/
public InputStream bufferedImageToInputStream(BufferedImage image){
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ImageIO.write(image, "png", os);
InputStream input = new ByteArrayInputStream(os.toByteArray());
return input;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
效果展示
Mission Compled! resolved by zhengkai.blog.csdn.net
相關文章
- Java使用Thumbnailator給圖片加水印JavaAI
- Java ffmpeg 實現影片加文字/圖片水印功能Java
- HttpHandler給本站加圖片水印HTTP
- 給picgo上傳的圖片加個水印PicGo
- java thumbnailator 做圖片處理JavaAI
- nginx 透過 php 代理給圖片加水印NginxPHP
- Thumbnailator處理圖片AI
- Java 給 Word 文件每一頁新增不同圖片水印Java
- 用python來給圖片加水印Python
- 用photoshop給圖片批次加水印
- Java 給Word每一頁設定不同圖片水印效果Java
- 通過API介面實現圖片上傳API
- php微擎功能-圖片加水印PHP
- 寫個給圖片加水印的方法
- 給圖片加水印的簡易方法
- 【Python】批量給圖片增加水印工具Python
- Node專案中用images+imageinfo庫給圖片批量新增水印
- java 圖片水印處理類Java
- Android Spingboot 實現SSE通訊案例Androidboot
- 前端實現水印功能前端
- GD 庫 PNG 透明底圖片新增文字及圖片水印
- 文件預覽功能使用技巧(4)—圖片水印
- vue實現聊天+圖片表情功能Vue
- 使用jpeg圖片庫,顯示圖片並簡單實現LCD的觸屏功能
- Java 在Word中新增多行圖片水印Java
- 批次圖片新增水印
- 短視訊商城系統,通過Java實現圖片驗證碼,點選重新整理圖片驗證碼Java
- C# 給Word每一頁設定不同圖片水印C#
- 直播平臺搭建,實現圖片縮圖功能
- 使用canvas給banner圖片加個顏色條Canvas
- node+express實現圖片上傳功能Express
- 商品圖片批量加水印,一鍵新增文字、logo圖片水印方法分享Go
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 小程式–儲存圖片到相簿功能實現
- text_blind_watermark%3A 給文字加隱水印
- 玩轉 SpringBoot2.x 之整合 thumbnailator 圖片處理Spring BootAI
- 基於Spring Boot實現圖片上傳/加水印一把梭操作Spring Boot
- Vue通過Blob物件實現匯出Excel功能Vue物件Excel