springboot给图片加水印

在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

Original Image

Watermarked Image

Watermarked Image

这是一个简单的例子,你可以根据实际需求进行修改和扩展。确保在实际应用中添加适当的异常处理和错误处理。此外,还可以考虑使用更专业的图形处理库,如Java Advanced Imaging API(JAI)或第三方库,以满足更复杂的需求。

你可能感兴趣的:(网站搭建,Java零基础学习,spring,boot,后端,java)