SpringBoot 实现图片加水印
概述
在许多应用场景中,为了保护版权或添加标识,我们需要给图片添加水印。SpringBoot作为一个轻量级的Java企业级应用框架,可以很方便地集成图片处理库来实现这一功能。本文将介绍如何在SpringBoot项目中实现图片加水印的功能。
环境准备
- SpringBoot:基础框架
- Java:编程语言
- Maven:依赖管理工具
- Apache Commons IO:文件操作库
- Java ImageIO:Java自带的图片处理库
步骤一:创建SpringBoot项目
首先,我们需要创建一个SpringBoot项目。可以通过Spring Initializr(https://start.spring.io/)快速生成项目结构。
步骤二:添加依赖
在pom.xml文件中添加必要的依赖。
xml
<dependencies>
<!-- SpringBoot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<!-- SpringBoot Test Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
步骤三:实现加水印功能
创建一个服务类WatermarkService,用于实现加水印的逻辑。
java
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class WatermarkService {
/**
* 给图片添加水印
* @param srcImgPath 原图片路径
* @param watermark 水印文本
* @param outputImgPath 输出图片路径
* @throws IOException
*/
public void addWatermark(String srcImgPath, String watermark, String outputImgPath) throws IOException {
// 读取图片
File file = new File(srcImgPath);
BufferedImage src = ImageIO.read(file);
// 创建水印图片
int width = src.getWidth();
int height = src.getHeight();
BufferedImage watermarkImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D) watermarkImage.getGraphics();
// 设置水印颜色和透明度
g2d.setColor(new Color(255, 255, 255, 100));
g2d.setFont(new Font("微软雅黑", Font.BOLD, 60));
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
// 计算水印位置
int x = (width - getLength(watermark) * 60) / 2;
int y = (height - 60) / 2;
// 添加水印
g2d.drawString(watermark, x, y);
g2d.dispose();
// 将原图和水印图合并
Graphics2D g = (Graphics2D) src.getGraphics();
g.drawImage(watermarkImage, 0, 0, width, height, null);
g.dispose();
// 输出图片
ImageIO.write(src, "jpg", new File(outputImgPath));
}
/**
* 计算文本长度(简单计算,仅适用于英文)
* @param text 文本
* @return 长度
*/
private int getLength(String text) {
return text.length();
}
}
步骤四:创建Controller
创建一个WatermarkController类,用于处理加水印的请求。
java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
@RequestMapping("/watermark")
public class WatermarkController {
@Autowired
private WatermarkService watermarkService;
/**
* 添加水印
* @param file 图片文件
* @param watermark 水印文本
* @return 加水印后的图片路径
* @throws IOException
*/
@PostMapping("/add")
public String addWatermark(@RequestParam("file") MultipartFile file, @RequestParam("watermark") String watermark) throws IOException {
if (file.isEmpty()) {
return "文件不能为空";
}
// 保存文件到临时目录
String srcImgPath = "/path/to/temp/" + file.getOriginalFilename();
file.transferTo(new File(srcImgPath));
// 添加水印
String outputImgPath = "/path/to/output/" + file.getOriginalFilename();
watermarkService.addWatermark(srcImgPath, watermark, outputImgPath);
return "图片加水印成功,路径:" + outputImgPath;
}
}
步骤五:测试
启动SpringBoot应用,通过POST请求/watermark/add接口,传入图片文件和水印文本,测试加水印功能。
总结
通过上述步骤,我们可以在SpringBoot项目中实现一个简单的图片加水印功能。当然,实际应用中可能需要更复杂的水印处理,比如水印图片、调整水印位置等,可以根据需求进行相应的扩展和优化。
原文地址:https://blog.csdn.net/h356363/article/details/143695722
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!