在Spring Boot中给图片加水印通常可以通过使用Java的图形处理库来实现。一个常用的库是Java的AWT(Abstract Window Toolkit)和ImageIO库。以下是一个简单的示例,演示如何在Spring Boot中给图片加水印:
首先,确保在你的pom.xml
文件中包含了spring-boot-starter-web
以及spring-boot-starter-thymeleaf
(如果你使用Thymeleaf作为模板引擎):
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
然后,创建一个Controller类,处理图片加水印的请求:
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
@Controller
@RequestMapping("/watermark")
public class WatermarkController {
@GetMapping
public String addWatermark(@RequestParam String imagePath, Model model) throws IOException {
// 读取原始图片
Resource resource = new ClassPathResource("static/images/" + imagePath);
File originalImageFile = resource.getFile();
BufferedImage originalImage = ImageIO.read(originalImageFile);
// 创建一个带有水印的图片
BufferedImage watermarkedImage = addWatermarkToImage(originalImage, "Your Watermark");
// 保存带有水印的图片
String outputImagePath = "path/to/output/" + imagePath;
ImageIO.write(watermarkedImage, "png", new File(outputImagePath));
model.addAttribute("originalImagePath", imagePath);
model.addAttribute("watermarkedImagePath", outputImagePath);
return "watermark";
}
private BufferedImage addWatermarkToImage(BufferedImage originalImage, String watermarkText) {
// 创建一个带有透明度的图像
BufferedImage watermarkedImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D) watermarkedImage.getGraphics();
// 将原始图片绘制到带有透明度的图像上
g2d.drawImage(originalImage, 0, 0, null);
// 设置水印字体、颜色和透明度
Font watermarkFont = new Font("Arial", Font.BOLD, 36);
g2d.setFont(watermarkFont);
g2d.setColor(new Color(255, 255, 255, 128));
// 计算水印的位置
FontMetrics fontMetrics = g2d.getFontMetrics();
int x = (originalImage.getWidth() - fontMetrics.stringWidth(watermarkText)) / 2;
int y = originalImage.getHeight() / 2;
// 添加水印
g2d.drawString(watermarkText, x, y);
g2d.dispose();
return watermarkedImage;
}
}
在这个例子中,addWatermarkToImage
方法接受一个BufferedImage
对象和水印文本,然后在图像上添加水印。Controller类中的addWatermark
方法负责处理请求,读取原始图片,添加水印,保存带有水印的图片,并将原始图片路径和带有水印图片路径添加到模型中。
最后,创建一个Thymeleaf模板文件(watermark.html),用于显示原始图片和带有水印图片:
Watermark Example
Original Image
Watermarked Image
这是一个简单的例子,你可以根据实际需求进行修改和扩展。确保在实际应用中添加适当的异常处理和错误处理。此外,还可以考虑使用更专业的图形处理库,如Java Advanced Imaging API(JAI)或第三方库,以满足更复杂的需求。