当前位置: 首页 > news >正文

若依实现图片上传时自动添加水印

文章目录

  • 总体思路
  • 1. 修改通用上传方法
  • 2. 去除文件路径前两级目录
  • 3. 添加水印方法
  • 运行效果
  • 总结

为了解决图盗用,并有效保护图片版权,若依项目需要实现一个功能:上传图片时,自动在图片上添加水印。这不仅可以有效防止盗用,还能提高内容的安全性。本文将详细介绍如何在若依项目中实现图片上传时自动添加水印的功能。

总体思路

  1. 修改通用上传方法:在现有的上传图片功能中,添加步骤,将上传的图片添加水印。
  2. 处理文件路径:去除上传文件路径中的前两级目录,确保文件存储路径一致。
  3. 添加水印功能:使用 Graphics2D 绘制水印,并保存修改后的图片。

1. 修改通用上传方法

在 CommonController.java 中,我们需要修改文件上传逻辑。通过将上传的图片路径传递到水印添加方法,并返回水印处理后的图片 URL。

/*** 上传文件并添加水印(单个文件)*/
@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);// 构建访问上传后文件的URLString 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());}
}

2. 去除文件路径前两级目录

为了确保上传的文件路径没有多余的目录,我们需要创建一个方法来去除路径的前两级目录。

/*** 去除文件路径的前两级目录*/
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;
}

3. 添加水印方法

接下来,我们实现添加水印的功能。在 Graphics2D 类中,我们可以绘制文本水印。以下是如何在图片上添加水印的代码:

/*** 给图片添加水印*/
private String addWatermark(String filePath) throws IOException {// 读取图片文件BufferedImage image = ImageIO.read(new File(filePath));// 创建Graphics2D对象,设置水印的字体和样式Graphics2D g2d = (Graphics2D) image.getGraphics();Font font = new Font("宋体", Font.BOLD, 30);  // 设置字体、样式和大小g2d.setFont(font);g2d.setColor(new Color(255, 0, 0, 100)); // 红色透明水印// 水印内容String watermarkText = "测试水印";// 水印位置:右下角int x = image.getWidth() - g2d.getFontMetrics().stringWidth(watermarkText) - 10;int y = image.getHeight() - 10;// 绘制水印g2d.drawString(watermarkText, x, y);// 保存水印处理后的图片,覆盖原文件File output = new File(filePath);ImageIO.write(image, "jpg", output);// 释放Graphics2D资源g2d.dispose();return filePath;
}

运行效果

一旦集成了水印添加功能,当用户上传图片时,系统将自动在图片的右下角添加水印。以下是上传并添加水印后的效果示例:
在这里插入图片描述

上传成功后,返回带水印的图片 URL,用户可以通过该 URL 访问带有水印的图片。

总结

通过以上步骤,我们成功地为若依项目实现了图片上传时自动添加水印的功能。这不仅保护了图片的版权,还增强了图片内容的安全性。通过 Graphics2D 类的绘图功能,我们可以灵活地在图片上添加自定义水印,进一步提升了项目的功能性和用户体验。

http://www.lryc.cn/news/504096.html

相关文章:

  • 用于日语词汇学习的微信小程序+ssm
  • 【信息系统项目管理师】高分论文:论信息系统项目的范围管理(融媒体发布系统)
  • Kaggler日志--Day5
  • VScode MAC按任意键关闭终端 想要访问桌面文件
  • 小粑记故乡的记忆
  • git使用小记
  • Python实现办公自动化——自动编写word文档
  • 番外篇 | BGF-YOLO:引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8检测性能
  • Python运维自动化之字典Dict
  • axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示
  • 9.Python 条件语句和循环语句
  • 智能家居控制系统设计
  • Windows系统word插入公式自动编号并交叉引用
  • 0.基础语法
  • mysql命令行界面(黑框)的登录
  • 【机器学习】解构概率,重构世界:贝叶斯定理与智能世界的暗语
  • threejs——无人机概念切割效果
  • electron学习笔记(一)
  • 基于Arduino蹲便器的自动清洁系统(论文+源码)
  • 【JavaWeb后端学习笔记】使用HttpClient发送Http请求
  • 2024告别培训班 数通、安全、云计算、云服务、存储、软考等1000G资源分享
  • 【C++】- 掌握STL List类:带你探索双向链表的魅力
  • 基于streamlit搭简易前端页面
  • Harmony Next开发通过bindSheet绑定半模态窗口
  • YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构
  • 【51单片机】矩阵按键快速上手
  • 一文说清:git reset HEAD原理
  • 【前端面试题】书、定位问题、困难
  • WADesk 升级 Webpack5 一些技术细节认识5和4的区别在哪里
  • 学习 Dockerfile 常用指令