开发喵星球

若依上传图片添加水印(196)

1、修改通用上传方法

位置:ruoyi-admin模块的com/ruoyi/web/controller/common/CommonController.java

/**
 * 通用上传请求(单个)
 */
@PostMapping("/upload")
public AjaxResult uploadFile(MultipartFile file) throws Exception {
    try {
        // 获取文件上传路径
        String filePath = RuoYiConfig.getUploadPath();

        // 上传并返回新文件名称
        String fileName = FileUploadUtils.upload(filePath, file);
        // 去除文件路径的前两级目录
        String updatedFilePath = removePath(fileName);
        // 添加水印
        String watermarkFilePath = addWatermark(filePath + updatedFilePath);
        // 构建访问上传后文件的URL
        String url = serverConfig.getUrl() + watermarkFilePath;

        // 构建响应对象并返回
        AjaxResult ajax = AjaxResult.success();
        ajax.put("url", url);
        ajax.put("fileName", fileName);
        ajax.put("newFileName", FileUtils.getName(fileName));
        ajax.put("originalFilename", file.getOriginalFilename());
        return ajax;
    } catch (Exception e) {
        // 如果发生异常,则返回错误信息
        return AjaxResult.error(e.getMessage());
    }
}

去除文件路径的前两级目录方法

/**
 * 去除文件路径的前两级目录
 */
private String removePath(String filePath) {
    int count = 0;
    int index = -1;
    for (int i = 0; i < filePath.length(); i++) {
        // 统计斜杠数量,找到第三个斜杠的位置
        if (filePath.charAt(i) == '/') {
            count++;
            if (count == 3) {
                index = i;
                break;
            }
        }
    }
    // 如果找到第三个斜杠,则返回之后的路径,否则返回原路径
    if (index != -1) {
        return filePath.substring(index);
    }
    return filePath;
}

2、添加水印方法

/**
 * 给图片文件添加水印
 */
private String addWatermark(String filePath) throws IOException {
    // 读取图片文件
    BufferedImage image = ImageIO.read(new File(filePath));

    // 创建Graphics(坐标)对象,并设置水印文字的样式,可根据项目需要进行调整
    Graphics2D g2d = (Graphics2D) image.getGraphics();
    Font font = new Font("宋体", Font.BLACK, 20);
    g2d.setFont(font);
    g2d.setColor(Color.BLACK);
    // 在右下角添加水印
    String watermark = "kaifamiao专属水印";
    int x = image.getWidth() - g2d.getFontMetrics().stringWidth(watermark) - 100;
    int y = image.getHeight() - 100;
    g2d.drawString(watermark, x, y);

    // 保存添加水印后的图片,覆盖原始图片
    File output = new File(filePath);
    ImageIO.write(image, "jpg", output);
    g2d.dispose();
    return filePath;
}

注:使用javaGraphics2D为图片添加水印,不需要额外的依赖

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-04-30 23:58:20 阅读量:117
<<   >>


powered by kaifamiao