利用织梦自带的 imageWaterMark 函数,这个函数不仅可以加水印,也可以进行图片缩放,我们通过修改配置文件,让它在上传时自动调用缩放功能。

下面是详细的步骤和方法,从最简单、最推荐的方法开始。
修改配置文件(最推荐、最安全)
这是官方推荐且最稳妥的方法,只需要修改一个配置文件即可。
操作步骤:
-
找到配置文件 登录你的网站后台,通过FTP或文件管理器,找到并打开以下文件:
/include/config_update.php
(图片来源网络,侵删) -
修改配置项 在这个文件中,找到
$cfg_ddimg_width和$cfg_ddimg_height这两个变量。$cfg_ddimg_width: 设置你希望上传图片的最大宽度。$cfg_ddimg_height: 设置你希望上传图片的最大高度。
重要提示: 这里的设置是“按比例缩放,以不超过此尺寸为准”,也就是说,如果一张图片的宽度超过了你设置的值,或者高度超过了你设置的值,织梦就会按比例将其缩小到这个尺寸范围内,如果图片本身比这个尺寸小,则不会被放大。
你希望所有上传的图片宽度不超过800px,高度不超过600px,你就将文件中的这两行修改为:
$cfg_ddimg_width = '800'; $cfg_ddimg_height = '600';
-
保存文件 保存并关闭
config_update.php文件。
(图片来源网络,侵删) -
清空缓存并测试
- 登录织梦后台,进入“系统” -> “一键更新网站” -> “更新缓存”,点击“开始执行”。
- 去任意可以上传图片的地方(比如添加文章、图集等)重新上传一张尺寸较大的图片。
- 上传成功后,检查网站根目录下的
/uploads/文件夹,你会发现织梦自动生成了一个新的缩略图文件(原图是abc.jpg,缩略图可能是abc.small.jpg或类似命名)。
优点:
- 安全:不修改核心程序文件,未来织梦升级时不会被覆盖。
- 简单:只需修改一个配置项,无需编程知识。
- 全局生效:对所有后台上传图片的地方都有效(文章、图集、产品等)。
修改核心PHP文件(功能更强大,但有风险)
如果你不仅需要缩放,还需要对图片进行裁剪、居中显示等更精细的控制,就需要修改织梦处理图片的核心文件。此方法有风险,请务必先备份文件!
操作步骤:
-
备份文件 通过FTP或文件管理器,备份以下文件:
/include/helpers/archive.helper.php(这是处理文章内容(包括图片)的核心助手文件) -
找到并修改图片处理函数 打开
archive.helper.php文件,找到名为GetImageMap()的函数(大约在670行左右,不同版本行号可能不同)。在这个函数内部,找到调用
imageWaterMark的代码行,它通常是这样的:$cfg_uploaddir = $GLOBALS['cfg_uploaddir']; $imageWaterMark = $GLOBALS['imageWaterMark']; // ... 其他代码 ... ImageResize($oldfile, $newfile, $width, $height);
我们的目标是修改这里的参数,让它支持按比例缩放,织梦的
ImageResize函数本身是支持按比例缩放的。 -
修改代码实现按比例缩放 找到类似下面这段代码(这是处理缩略图的逻辑,我们主要参考它):
// ... 在 GetImageMap 函数内 ... if($width>0 && $height>0) { // 生成小图 $resline = ImageResize($oldfile, $newfile, $width, $height); } else { // 不生成小图 @copy($oldfile, $newfile); } // ... 其他代码 ...你需要修改处理原图缩放的逻辑,找到处理
ddimg(大图缩放)的部分,将代码修改为以下形式,关键在于$toW和$toH的计算。示例修改(请根据你文件中的实际代码结构进行调整):
假设你找到了处理大图缩放的代码块,原来是直接使用配置的宽高:
// 原来的代码可能类似这样 $toW = $cfg_ddimg_width; $toH = $cfg_ddimg_height; ImageResize($oldfile, $newfile, $toW, $toH);
你可以修改它,使其更智能地按比例缩放,同时保持清晰度:
// 修改后的代码示例 $toW = $cfg_ddimg_width; $toH = $cfg_ddimg_height; // 获取原图尺寸 $imginfo = @getimagesize($oldfile); $srcW = $imginfo[0]; $srcH = $imginfo[1]; // 计算缩放比例,并确保图片不会放大 $ratio_w = $toW / $srcW; $ratio_h = $toH / $srcH; $ratio = min($ratio_w, $ratio_h); // 如果原图尺寸小于目标尺寸,则不进行缩放(保持原图) if ($ratio >= 1) { @copy($oldfile, $newfile); } else { // 否则,按比例缩放 $newW = round($srcW * $ratio); $newH = round($srcH * $ratio); ImageResize($oldfile, $newfile, $newW, $newH); }代码解释:
- 首先获取原图的宽高。
- 然后计算出按宽度缩放和按高度缩放的两个比例。
- 取其中较小的比例(
min()),这样可以确保图片在缩放后,既能适应设定的宽度,又能适应设定的高度,且不会超出任何一个范围,同时保持长宽比不变。 - 最后判断,如果原图比目标尺寸还小,就直接复制原图,避免图片被拉伸失真。
-
保存文件并测试
- 保存修改后的
archive.helper.php文件。 - 同样,建议去后台清空缓存后,重新上传一张大图进行测试。
- 保存修改后的
优点:
- 功能强大:可以实现更复杂的逻辑,比如不放大原图、精确控制裁剪等。
- 灵活性高:可以根据需要自由编写代码。
缺点:
- 有风险:修改了核心文件,织梦升级后这些修改会被覆盖,需要重新修改。
- 需要PHP知识:需要理解代码逻辑,修改不当可能导致网站报错或图片无法正常显示。
总结与建议
| 特点 | 方法一 (修改配置) | 方法二 (修改代码) |
|---|---|---|
| 易用性 | ⭐⭐⭐⭐⭐ (非常简单) | ⭐⭐ (需要代码知识) |
| 安全性 | ⭐⭐⭐⭐⭐ (非常安全) | ⭐⭐ (有风险,升级会丢失) |
| 功能性 | ⭐⭐⭐ (满足基本需求) | ⭐⭐⭐⭐⭐ (可自定义复杂逻辑) |
| 推荐度 | 强烈推荐 | 不推荐普通用户使用,仅适用于有二次开发需求的用户 |
对于绝大多数用户,请直接使用【方法一】,它简单、安全、有效,完全可以满足“上传图片自动成比例”的需求。
只有在【方法一】无法满足你的特殊要求(你需要对图片进行强制裁剪,而不是按比例缩放)时,才考虑使用【方法二】。
