使用 UEditor 自带的水印功能(推荐,最简单)
UEditor 本身就内置了图片水印功能,我们只需要在 DedeCMS 的后台配置一下即可开启,这是最简单、最直接的方法。

操作步骤:
-
登录 DedeCMS 后台: 使用管理员账号登录您的网站后台。
-
进入 UEditor 设置: 在后台菜单中找到 “系统” -> “系统基本参数”,然后点击左侧的 “核心设置”。
-
修改 UEditor 默认配置: 在“核心设置”页面中,找到
cfg_ueditorpage这个选项,这个选项里存放的是 UEditor 的初始化配置代码,我们需要在这里添加水印相关的配置。点击 “修改” 按钮,进入编辑状态。
(图片来源网络,侵删) -
添加水印配置代码: 在
cfg_ueditorpage的文本框中,找到window.UEDITOR_CONFIG = { ... }这个对象,在 之前(即配置对象的末尾),添加以下代码:// 开启图片上传后,自动添加水印 ,isWatermark:true // 水印图片路径(请替换为您自己的水印图片) ,watermarkImg:'../images/watermark.png' // 水印图片的位置,取值范围:1-9,具体位置如下: // 1: 左上, 2: 中上, 3: 右上 // 4: 左中, 5: 中中, 6: 右中 // 7: 左下, 8: 中下, 9: 右下 ,watermarkPos:9 // 水印图片的透明度,取值范围:0-1,值越小越透明 ,watermarkAlpha:0.5
配置说明:
isWatermark: true:这是核心,表示开启水印功能。watermarkImg: '...':这是最重要的一步,请将'../images/watermark.png'替换为您网站中水印图片的实际路径,路径是相对于 UEditor 文件夹的,您可以将水印图片上传到/dede/images/目录下,所以路径可以写成'../images/watermark.png',如果放在根目录的images文件夹,则可能是'/images/watermark.png'。watermarkPos: 9:设置水印位置。9代表右下角,这是最常用的位置,您可以根据需要修改为 1-9 的数字。watermarkAlpha: 0.5:设置透明度。5是半透明,1是完全不透明,0是完全透明,建议设置在3到7之间。
最终效果示例:
window.UEDITOR_CONFIG = { /* UEditor 的其他配置... */ ,initialFrameWidth: 1000 // 初始化编辑器宽度,默认1000 ,initialFrameHeight: 320 // 初始化编辑器高度,默认320 /* 在这里添加下面的水印配置 */ ,isWatermark:true ,watermarkImg:'../images/watermark.png' ,watermarkPos:9 ,watermarkAlpha:0.5 }; -
保存并清空缓存: 点击“保存”按钮,务必去 “系统” -> “一键更新网站” -> “更新缓存”,点击“开始执行”。
(图片来源网络,侵删) -
测试: 前台发布文章或修改文章,使用 UEditor 上传一张新图片,上传成功后,查看图片,您会发现水印已经被自动添加上了。
修改 UEditor 源码(功能更强大)
如果您需要更复杂的水印效果,比如在图片上添加文字水印,或者需要在上传图片时就处理,那么就需要直接修改 UEditor 的 PHP 源码,这种方法功能更灵活,但需要修改文件,升级 DedeCMS 时可能会被覆盖。
操作步骤:
-
找到处理图片上传的文件: UEditor 的图片上传处理文件位于
dede/ueditor/php/目录下,主要文件是Uploader.class.php。 -
备份源文件: 在修改之前,请务必备份
Uploader.class.php文件,以防修改出错无法恢复。 -
修改
Uploader.class.php文件: 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开Uploader.class.php文件。找到
upFile方法,在文件上传成功后,通常会调用this->state = 'SUCCESS';之前,插入添加水印的代码。您可以在
upFile方法中找到类似这样的代码块:// ... 其他代码 ... $this->state = 'SUCCESS'; // ... 其他代码 ...
在
this->state = 'SUCCESS';这行代码之前,添加调用水印函数的代码。示例:添加图片水印
假设您有一个
add_watermark.php的工具函数文件,或者直接在这里写逻辑,这里我们直接在Uploader.class.php里写一个简单的图片水印添加函数。// 在 Uploader.class.php 文件中,找到 upFile 方法,在 $this->state = 'SUCCESS'; 之前添加如下代码: // 在 upFile 方法内部,this->state = 'SUCCESS'; 之前 if ($this->state == 'SUCCESS') { // 获取上传后的文件完整路径 $fullFilePath = $this->filePath . $this->fileName; // 调用水印函数 $this->addWatermark($fullFilePath); }在
Uploader.class.php文件的末尾(在类的最后一个大括号 之前),添加addWatermark这个方法:/** * 给图片添加水印 * @param string $imagePath 图片路径 */ private function addWatermark($imagePath) { // 1. 检查是否开启了GD库 if (!function_exists('gd_info')) { return; } // 2. 获取图片信息 $imageInfo = getimagesize($imagePath); if (!$imageInfo) { return; } // 3. 定义水印图片路径 $watermarkPath = dirname(__FILE__) . '/../images/watermark.png'; // 请确保此路径正确 // 4. 如果水印图片不存在,则不处理 if (!file_exists($watermarkPos)) { return; } // 5. 根据图片类型创建画布 switch ($imageInfo[2]) { case 1: // GIF $im = imagecreatefromgif($imagePath); break; case 2: // JPG $im = imagecreatefromjpeg($imagePath); break; case 3: // PNG $im = imagecreatefrompng($imagePath); break; default: return; } // 6. 创建水印图片 $watermark = imagecreatefrompng($watermarkPath); $watermarkWidth = imagesx($watermark); $watermarkHeight = imagesy($watermark); // 7. 计算水印位置(右下角,留10px边距) $destX = imagesx($im) - $watermarkWidth - 10; $destY = imagesy($im) - $watermarkHeight - 10; // 8. 合并水印和原图 imagecopy($im, $watermark, $destX, $destY, 0, 0, $watermarkWidth, $watermarkHeight); // 9. 保存图片(覆盖原图) switch ($imageInfo[2]) { case 1: imagegif($im, $imagePath); break; case 2: imagejpeg($im, $imagePath, 90); // 90为图片质量 break; case 3: imagepng($im, $imagePath); break; } // 10. 释放内存 imagedestroy($im); imagedestroy($watermark); } -
上传水印图片: 将您准备好的水印图片(
watermark.png)上传到dede/ueditor/php/images/目录下。 -
清空缓存并测试: 和方法一一样,保存修改后,去后台“一键更新网站”清空缓存,然后在前台测试上传图片。
两种方法的对比总结
| 特性 | 方法一(修改配置) | 方法二(修改源码) |
|---|---|---|
| 操作难度 | 非常简单,只需修改后台参数。 | 较复杂,需要修改代码,有一定门槛。 |
| 功能限制 | 仅支持图片水印,且位置、透明度等选项有限。 | 功能强大,可轻松实现文字水印、多图水印、位置自定义等。 |
| 安全性 | 较高,不涉及核心文件修改。 | 较低,修改了核心文件,如果代码有漏洞或不严谨,可能带来风险。 |
| 维护性 | 非常好,DedeCMS 升级时,配置参数通常保留,不易丢失。 | 差,DedeCMS 或 UEditor 升级后,修改的源码会被覆盖,需要重新修改。 |
| 推荐度 | 强烈推荐,能满足 90% 的用户需求。 | 适用于有特殊水印需求,且能自行维护代码的高级用户。 |
重要注意事项
- 水印图片:请务必使用透明背景的 PNG 格式图片作为水印,这样效果最好。
- 路径问题:无论是方法一还是方法二,水印图片的路径一定要写对,可以通过浏览器开发者工具查看上传后图片的 URL,反向推断正确的路径。
- GD 库:添加水印功能需要 PHP 环境开启 GD 库,您可以通过
phpinfo()函数来检查您的服务器是否已安装并启用 GD 库。 - 权限问题:确保存放水印图片的目录以及 UEditor 上传图片的目录有写入权限(通常是 755 或 644)。
- 服务器性能:如果图片上传量非常大,每次上传都实时添加水印可能会对服务器造成一定的性能压力,对于大型网站,可以考虑使用图片处理服务(如又拍云、阿里云 OSS)的云端水印功能。
对于绝大多数 DedeCMS 方法一已经足够使用,且最安全、最方便,只有在方法一无法满足您的特定需求时,才建议尝试方法二。
