菜鸟科技网

织梦如何调用原图?方法与技巧解析

上传原图 -> 后台设置(如缩略图、大图尺寸)-> 生成缩略图和大图,所谓的“原图”就是指你最初上传的那个未经修改的图片文件。

织梦如何调用原图?方法与技巧解析-图1
(图片来源网络,侵删)

下面我将分几种最常见的情况,为你详细讲解如何调用原图。


核心思路

要调用原图,关键在于找到织梦存储原图的路径,织梦的原图路径通常存储在数据库的 dede_addonarticle (文章附加表) 或 dede_archives (主表) 等数据表的 litpic (缩略图) 或 body (文章内容) 字段中,但有时路径是相对的,并且织梦会进行一些路径处理。

最可靠的方法是利用织梦自带的标签或函数来获取。


{dede:field.body/})中调用

这是最简单的情况,如果你在文章编辑器中直接插入了图片,那么这张图片本身就是原图(或你指定的尺寸),织梦默认会在内容中保留原图路径。

织梦如何调用原图?方法与技巧解析-图2
(图片来源网络,侵删)

直接使用:

{dede:field.body/}

当你使用 {dede:field.body/} 标签输出文章内容时,里面的 <img> 标签 src 属性指向的就是你插入的图片,如果这张图就是原图,那它就已经被调用了。

如何确保是原图? 在后台发布文章时,插入图片后,点击“确定”前,请确保没有在“图片ALT描述”等选项中勾选“生成远程缩略图”或类似的选项,并且你的系统设置中也没有对文章内容内的图片进行自动缩放。


调用文章缩略图({dede:field.litpic/})对应的原图

这是最常见的需求,我们通常用 {dede:field.litpic/} 来调用文章列表页的缩略图,但这个调用的是后台设置生成的缩略图(如 200x150 的小图),我们希望在文章详情页点击这张缩略图时,能弹出或跳转到对应的原图。

织梦如何调用原图?方法与技巧解析-图3
(图片来源网络,侵删)

织梦有一个非常方便的标签 field.name 可以实现这个功能。

场景:文章列表页或文章详情页,缩略图 <a> 标签的 href 指向原图。

<a href="{dede:field name='phpurl'/}/imgview.php?img={dede:field litpic/}">
    <img src="{dede:field litpic/}" alt="{dede:field.title/}" />
</a>

代码解析:

  1. <img src="{dede:field litpic/}">:这部分保持不变,用于显示缩略图。
  2. <a href="...">:这部分是关键,我们让缩略图链接到一个可以查看原图的页面。
  3. {dede:field name='phpurl'/}/imgview.php{dede:field name='phpurl'/} 会获取到你的网站 php 文件夹路径(如 /php)。imgview.php 是织梦自带的一个图片查看器脚本。
  4. ?img={dede:field litpic/}:我们将缩略图的 src 作为参数 img 传递给 imgview.php

imgview.php 的工作原理: imgview.php 接收到 img 参数(即缩略图路径)后,它会根据织梦的命名规则(原图可能是 202505/22_a.jpg,缩略图可能是 202505/22_a_200x150.jpg),自动找到并输出对应的原图

优点:

  • 织梦官方支持,兼容性好。
  • 可以对原图进行一些安全处理,比如禁止盗链。
  • 可以显示一个图片查看器,用户体验更好。

在图集({dede:productimagelist})中调用原图

在图集中,情况更复杂一些,因为每张图都可能有一个缩略图和一个大图,我们通常希望点击图集中的小图,能展示出高质量的大图,或者直接链接到原图。

织梦的图集标签是 {dede:productimagelist},它内部循环输出每张图片。

场景:图集中的图片,点击后链接到原图。

{dede:productimagelist}
    <li>
        <!-- 
            imgsrc: 大图的路径 (通常是你后台设置的“图片大图”尺寸)
         -->
        <a href="[field:imgsrc/]" data-original="[field:imgurl/]">
            <img src="[field:imgurl/]" alt="[field:text/]" width="200" height="150" />
        </a>
    </li>
{/dede:productimagelist}

代码解析:

  1. [field:imgurl/]:这是缩略图的路径,用于 <img> 标签的 src 属性,在列表页快速加载。
  2. [field:imgsrc/]:这是大图的路径,通常是你后台设置的“图片大图”尺寸(如 800x600),它比缩略图大,但不一定是原图,我们用它作为 <a> 标签的 href,这样点击后会跳转到或弹出这张大图。
  3. data-original="[field:imgurl/]":这是一个常见的最佳实践,我们使用 data-original 这个自定义属性来存储原图的路径,然后配合 jQuery 等前端库,可以实现懒加载(Lazy Load)效果,在用户需要时才加载原图,提升页面性能。

如何获取真正的原图?

织梦的图集功能在生成时,会将原图重命名并存放在 /uploads/allimg/ 目录下,缩略图和大图都是基于原图生成的。[field:imgurl/][field:imgsrc/] 指向的都是生成的文件,而不是原始上传文件。

在图集中,织梦标签默认不直接提供调用“原始上传文件”的路径,最接近“原图”的是 [field:imgsrc/],即你设置的大图尺寸,如果你需要100%的原图,可能需要修改数据库或通过其他更复杂的方式获取,但对于99%的场景,使用大图 [field:imgsrc/] 已经足够。


使用SQL直接查询(高级/不推荐)

如果你对织梦的标签不满意,或者有非常特殊的需求,可以直接使用 dede:sql 标签执行SQL查询。

场景:从附加表中获取文章内容中的原图路径。

假设你想获取某篇文章ID为 1 的正文中的第一张图片的原图路径。

{dede:sql sql="SELECT body FROM `dede_addonarticle` WHERE aid = 1"}
    [field:body function='(preg_match("/src=[\'\"]?([^>\"]+)[\'\"]?/i", @me, $matches) ? $matches[1] : "")'/]
{/dede:sql}

代码解析:

  1. SELECT body FROM ...:查询文章附加表中ID为1的文章内容。
  2. [field:body function='...'/]:对查询出的 body 字段内容进行处理。
  3. preg_match("/src=[\'\"]?([^>\"]+)[\'\"]?/i", @me, $matches):这是一个正则表达式,用于从HTML字符串(@me代表当前字段值)中提取第一个 src 属性的值,也就是图片路径。

注意:

  • 这种方法非常脆弱,如果文章内容没有图片,或者HTML结构稍有变化,就可能失效。
  • 直接操作数据库效率较低,且不安全,容易出错。
  • 除非万不得已,否则强烈建议优先使用方法一和方法二。

总结与最佳实践

场景 推荐方法 代码示例
文章正文中的图片 直接调用内容 {dede:field.body/}
文章缩略图链接到原图 使用 imgview.php <a href="{dede:field name='phpurl'/}/imgview.php?img={dede:field litpic/}">
图集中的图片 调用大图路径 <a href="[field:imgsrc/]">
特殊需求/调试 使用 dede:sql 见方法四(谨慎使用)

最终建议:

  1. 对于文章缩略图方法二 (imgview.php) 是最标准、最可靠的方式。
  2. 对于图集,直接使用 [field:imgsrc/] 作为大图链接即可,它通常已经足够清晰。
  3. 如果你的缩略图命名规则和原图路径有特定规律,你也可以手动拼接原图路径,{dede:field.litpic/} 的值是 uploads/2025/10/thumb_123.jpg,那么原图可能是 uploads/2025/10/123.jpg,但这依赖于固定的命名规则,不如官方方法灵活。
分享:
扫描分享到社交APP
上一篇
下一篇