在 Spring Boot 应用中,可以使用 Java 的图像处理库(如 java.awt 和 javax.imageio)来实现图片水印和裁剪功能。以下是一个示例,展示如何实现这些功能。
1. 添加依赖确保你的 pom.xml 中包含以下依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency> 2. 创建图片处理服务创建一个服务类,用于处理图片的水印和裁剪功能。
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
@Service
public class ImageService {
    public BufferedImage addWatermark(BufferedImage sourceImage, String watermarkText) {
        Graphics2D g2d = (Graphics2D) sourceImage.getGraphics();
        // 设置水印字体和颜色
        Font font = new Font("Arial", Font.BOLD, 30);
        g2d.setFont(font);
        g2d.setColor(new Color(255, 0, 0, 80)); // 红色,透明度80
        // 计算水印位置
        FontMetrics fontMetrics = g2d.getFontMetrics();
        int x = sourceImage.getWidth() - fontMetrics.stringWidth(watermarkText) - 10;
        int y = sourceImage.getHeight() - fontMetrics.getHeight() + 30;
        // 添加水印
        g2d.drawString(watermarkText, x, y);
        g2d.dispose();
        return sourceImage;
    }
    public BufferedImage cropImage(BufferedImage sourceImage, int x, int y, int width, int height) {
        return sourceImage.getSubimage(x, y, width, height);
    }
    public void saveImage(BufferedImage image, String formatName, File output) throws IOException {
        ImageIO.write(image, formatName, output);
    }
} 3. 创建控制器创建一个控制器,提供 API 接口来处理图片的水印和裁剪请求。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/api/images")
public class ImageController {
    @Autowired
    private ImageService imageService;
    @PostMapping("/watermark")
    public ResponseEntity<String> addWatermark(@RequestParam("file") MultipartFile file,
                                               @RequestParam("text") String text) {
        try {
            BufferedImage sourceImage = ImageIO.read(file.getInputStream());
            BufferedImage watermarkedImage = imageService.addWatermark(sourceImage, text);
            // 保存处理后的图片
            File output = new File("watermarked_image.png");
            imageService.saveImage(watermarkedImage, "png", output);
            return ResponseEntity.ok("Watermark added successfully. Saved as watermarked_image.png");
        } catch (IOException e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to add watermark");
        }
    }
    @PostMapping("/crop")
    public ResponseEntity<String> cropImage(@RequestParam("file") MultipartFile file,
                                            @RequestParam("x") int x,
                                            @RequestParam("y") int y,
                                            @RequestParam("width") int width,
                                            @RequestParam("height") int height) {
        try {
            BufferedImage sourceImage = ImageIO.read(file.getInputStream());
            BufferedImage croppedImage = imageService.cropImage(sourceImage, x, y, width, height);
            // 保存处理后的图片
            File output = new File("cropped_image.png");
            imageService.saveImage(croppedImage, "png", output);
            return ResponseEntity.ok("Image cropped successfully. Saved as cropped_image.png");
        } catch (IOException e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to crop image");
        }
    }
} 4. 测试 API你可以使用工具(如 Postman)来测试这些 API。
添加水印URL: POST http://localhost:8080/api/images/watermark参数:file: 上传的图片文件text: 水印文字裁剪图片URL: POST http://localhost:8080/api/images/crop参数:file: 上传的图片文件x: 裁剪区域的起始 x 坐标y: 裁剪区域的起始 y 坐标width: 裁剪区域的宽度height: 裁剪区域的高度总结通过上述步骤,你可以在 Spring Boot 应用中实现图片的水印和裁剪功能。这些功能可以根据具体需求进行扩展和优化。
网友回复
- threejs如何做个三维搭积木的游戏?
- three如何实现标记多个起始路过地点位置后选择旅行工具(飞机汽车高铁等),最后三维模拟行驶动画导出mp4?
- ai实时驱动的3d数字人可视频聊天的开源技术有吗
- swoole+phpfpm如何实现不同域名指向不同目录的多租户模式?
- 如何用go替换nginx实现请求phpfpm解析运行php脚本?
- 有没有浏览器离线运行进行各种文档、图片、视频格式转换的开源工具?
- 如何使用go语言搭建一个web防火墙?
- linux如何检测特定网络协议比如http协议中报文是否包含特点关键词并阻止返回给客户?
- 如果在nginx外过滤包含某些关键词的网页并阻止打开?
- 程序员怎么做副业赚钱?



 
				 
			 
			 
				 
			