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

news/2024/12/18 2:39:38/

文章目录

  • 总体思路
  • 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.ppmy.cn/news/1556016.html

相关文章

设计模式之 组合模式 C# 范例

组合模式&#xff08;Composite Pattern&#xff09;是一个结构型设计模式&#xff0c;它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端可以统一对待单个对象和对象集合。 在C#中&#xff0c;组合模式通常有以下几个要素&#xff1a; Compon…

《Docker - Docker Container(容器)之容器实战》

一、引言 Docker 是一种开源的容器化平台&#xff0c;它可以将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;从而实现快速部署、可扩展性和隔离性。在 Docker 中&#xff0c;容器是运行应用程序的基本单元&#xff0c;它提供了一种轻量级、高效的方式来管理应用程序…

PPT技巧:将幻灯片里的图片背景设置为透明

在PPT中添加了图片&#xff0c;想要将图片中的背景设置为透明或者想要抠图&#xff0c;有什么方法吗&#xff1f;今天分享两个方法。 方法一&#xff1a; 添加图片&#xff0c;选中图片之后&#xff0c;点击【图片格式】功能&#xff0c;点击最左边的【删除背景】 PPT会自动帮…

【python篇】——python基础语法一篇就能明白,快速理解

前言&#xff1a;本文章是在已经学习了C语言之后作者角度下进行书写的一篇关于python当中基础的语法说明。 文章目录 快速深入理解python当中的语法基本数据类型算数运算符类型的查看与转换 变量的输入与输出条件语句比较运算符和逻辑运算符if、elif、else三目运算符 循环语句w…

【学习笔记】移动端浏览器的视口

两个视口 视觉视口&#xff1a;是当前显示屏页面中的一部分 布局视口&#xff1a;完整页面的大小 视觉视口 布局视口有多宽&#xff1f;这因浏览器而异。Safari iPhone使用980px&#xff0c; Opera 850px, Android WebKit 800px, IE 974px 视觉视口和布局视口相同 局视口宽度…

Servlet容器来扫描指定包中的类 找到带有WebServlet注解的类

项目框架如上图 myweb下边三个类 package com.qcby.tomcat.myweb;import com.qcby.tomcat.webServlet.WebServlet;WebServlet(urlPatterns {"MyFirstServlet"}) public class MyFirstServlet {}package com.qcby.tomcat.myweb;import com.qcby.tomcat.webServlet.W…

《数据结构之美-- 单链表》

引言&#xff1a; 首先由上次我们实现的顺序表聊起&#xff0c;我们在实现顺序表的时候会发现&#xff0c;在每次插入数据时当空间不够时就会涉及到扩容&#xff0c;而顺序表的扩容一般都是呈二倍的形式来进行&#xff0c;因此这就有可能造成空间的浪费&#xff0c;那该如何解…

计算机网络知识点全梳理(二.HTTP知识点总结)

目录 HTTP基本概念 HTTP优缺点 HTTP优点&#xff08;1.1&#xff09; HTTP缺点 HTTP与HTTPS HTTP 与 HTTPS 的区别 HTTPS 解决 HTTP 的哪些安全问题&#xff1f; HTTPS 如何解决安全问题&#xff1f; HTTPS 连接建立的过程&#xff1a; HTTP/1.1、HTTP/2、HTTP/3 演…