在织梦(DedeCMS)系统中,获取缩略图原图是网站开发中常见的需求,尤其是当默认的缩略图尺寸无法满足特定场景时,直接调用原图能保证图片清晰度和显示效果,以下是详细的操作方法和原理说明,涵盖不同场景下的解决方案。

理解织梦缩略图的存储机制
织梦默认的缩略图处理逻辑是:上传图片后,系统会根据后台设置的缩略图参数(如宽度、高度、是否裁剪等)生成一张新的缩略图,并将原图与缩略图路径分别存储到数据库的dedemaintables
(默认数据表前缀)的addon
(附加字段,如litpic
)或body
)字段中,文章缩略图通常存储在litpic
字段,而文章内容中的图片则以HTML标签形式存在于body
字段。
获取文章缩略图的原图
若需获取文章列表页或内容页中缩略图的原图,可通过以下步骤实现:
-
检查原图路径存储字段
织梦默认不会在数据库中直接存储原图路径,但可以通过修改系统或利用字段扩展实现,若未修改过系统,需通过litpic
字段反推原图路径。- 默认规则:
litpic
存储的路径格式为/uploads/x/y/abc_thumb.jpg
,其中_thumb
为缩略图标识,原图路径则为/uploads/x/y/abc.jpg
。 - 实现方法:通过PHP字符串替换函数去除
_thumb
标识,$original_pic = str_replace('_thumb', '', $arcLitpic); // $arcLitpic为从数据库获取的缩略图路径
- 默认规则:
-
直接调用原图(需修改系统)
若希望系统直接存储原图路径,可通过以下步骤修改:(图片来源网络,侵删)- 进入织梦后台“系统”-“系统基本参数”-“附件设置”,将“缩略图默认扩展名”设为空,避免自动添加
_thumb
。 - 修改文件
include/helpers/upload.helper.php
,找到生成缩略图的函数(如ResizeImg
),注释或删除缩略图保存逻辑,仅保留原图。
- 进入织梦后台“系统”-“系统基本参数”-“附件设置”,将“缩略图默认扩展名”设为空,避免自动添加
获取文章内容中的原图body
字段)中的图片通常通过<img>
标签的src
属性引用缩略图,获取原图需解析HTML标签并替换路径:
-
使用正则表达式提取原图路径
织梦默认的图片上传会在body
中插入缩略图,原图路径可通过data-original
属性或反推得到,示例代码:$content = $arcRow['body']; // 文章内容 // 提取所有img标签的src preg_match_all('/<img\s+[^>]*src=["\']([^"\']+)["\'][^>]*>/i', $content, $matches); $original_images = []; foreach ($matches[1] as $imgUrl) { if (strpos($imgUrl, '_thumb') !== false) { $original_img = str_replace('_thumb', '', $imgUrl); $original_images[] = $original_img; } }
-
利用织梦内置函数调用原图
若开启了“远程图片本地化”,原图路径可能存储在dedemaintables
的upload
表中,可通过GetOne
查询获取:$dsql->SetQuery("SELECT filepath FROM `dede_uploads` WHERE url = '$imgUrl'"); $row = $dsql->GetOne(); $original_path = $row['filepath'];
通过自定义字段获取原图
若需要在自定义字段中直接调用原图,可创建一个字段类型为“图片”的自定义字段,并在上传时勾选“保留原图”,调用时直接输出该字段的值即可,无需额外处理。
常见问题与解决方案
以下是两个高频问题的解答:

问题1:为什么修改了upload.helper.php
后,缩略图仍然生成?
解答:可能是因为缓存或插件冲突,需清除后台缓存,并检查是否有其他插件调用了缩略图生成函数(如imageResize
),确保修改的文件路径正确,织梦存在多版本文件差异。
问题2:文章内容中的原图路径反推失败怎么办?
解答:若原图路径未遵循_thumb
规则(如使用自定义缩略图后缀),需通过FTP查看服务器上的实际文件命名规则,调整正则表达式匹配逻辑,若缩略图后缀为_small
,则将代码中的_thumb
替换为_small
。
通过以上方法,可有效解决织梦系统中获取缩略图原图的需求,提升网站图片显示质量,实际操作中需根据具体版本和配置灵活调整,建议修改前备份文件以防意外。