自学内容网 自学内容网

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)!