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
- 轉:Java新增水印(圖片水印,文字水印)Java
- Thumbnailator處理圖片AI
- PHP實現水印效果(文字、圖片)PHP
- Java 給 Word 文件每一頁新增不同圖片水印Java
- 用photoshop給圖片批次加水印
- Java 給Word每一頁設定不同圖片水印效果Java
- php微擎功能-圖片加水印PHP
- 用python來給圖片加水印Python
- 寫個給圖片加水印的方法
- 通過API介面實現圖片上傳API
- java 圖片水印處理類Java
- Node專案中用images+imageinfo庫給圖片批量新增水印
- 前端實現水印功能前端
- 【Python】批量給圖片增加水印工具Python
- Asp.Net圖片數字水印的實現ASP.NET
- GD 庫 PNG 透明底圖片新增文字及圖片水印
- java Html2Image 實現html轉圖片功能JavaHTML
- JAVA實現圖片裁剪Java
- 前端通過background實現圖片裁剪顯示的方法前端
- 通過video實現視訊暫停時出現圖片IDE
- vue實現聊天+圖片表情功能Vue
- Android Spingboot 實現SSE通訊案例Androidboot
- 批次圖片新增水印
- Java 在Word中新增多行圖片水印Java
- 使用jpeg圖片庫,顯示圖片並簡單實現LCD的觸屏功能
- C# 給Word每一頁設定不同圖片水印C#
- 短視訊商城系統,通過Java實現圖片驗證碼,點選重新整理圖片驗證碼Java
- 直播平臺搭建,實現圖片縮圖功能
- iOS 圖片上新增水印iOS
- 將上傳圖片打上防偽圖片水印並寫入資料庫資料庫
- 通過HTTP/2實現每天處理400GB圖片的實踐HTTP
- 【通過HTTP/2實現每天處理400GB圖片的實踐HTTP