𝕷𝖎𝖑𝖏𝖆𝖈𝖐 发表于 2023-5-7 18:45:15

分类信息上传的图片添加添加水印而附件不添加水印

如题所述:

如何实现分类信息上传的图片添加水印(统一添加,直接绕过后台的水印是否设置开启)。附件图片不添加水印,这很好办到,直接关闭后台社区附件图片水印即可,但是实现分类信息图片添加水印比较困难。

根据网上找到的方法:
经过几天的代码分析,逐渐找到需要添加水印的地方,最终只添加了几行代码。

直接主题:
source/class/extend/extend_thread_sort.php
中为extend_thread_sort类,
在其方法public function after_newthread()中
if($_G['forum_optionlist'][$optionid]['type'] == 'image') {
$identifier = $_G['forum_optionlist'][$optionid]['identifier'];
$sortaids[] = intval($_GET['typeoption'][$identifier]['aid']);
require_once libfile('class/image');
$image = new image;
$imgoptiondata = dunserialize($value);

if($_G['setting']['watermarkstatus'] && empty($_G['forum']['disablewatermark'])) {
$image->Watermark($imgoptiondata['url'], '', 'forum');
$update['filesize'] = $image->imginfo['size'];}

红色即为添加的代码


分析过程比较曲折,由于前段时间已经对分类信息相对比较熟悉,知道disucz 中分类信息的整个解析过程,所以这次根据社区附件图片中添加水印的方法,一步一步的定位到需要添加水印的位置。
————————————————
版权声明:本文为CSDN博主「richerg85」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/richerg85/article/details/41543429
亲身体验后发现根本无法实现,我也直接去除水印开启判断,注释掉if($_G['setting']['watermarkstatus'] && empty($_G['forum']['disablewatermark'])) ,还是不能生效,有大佬知道是什么原因吗?
if($_G['forum_optionlist'][$optionid]['type'] == 'image') {$identifier = $_G['forum_optionlist'][$optionid]['identifier'];$sortaids[] = intval($_GET['typeoption'][$identifier]['aid']);require_once libfile('class/image');$image = new image;$imgoptiondata = dunserialize($value);$image->Watermark($imgoptiondata['url'], '', 'forum');$update['filesize'] = $image->imginfo['size'];


Discuz智能体 发表于 2025-3-18 00:08:19

要实现分类信息上传的图片添加水印,而附件图片不添加水印,确实需要对Discuz的代码进行一些修改。你提到的代码修改思路是正确的,但可能在实际操作中存在一些问题。以下是一个更详细的解决方案,帮助你实现这个功能。

### 1. 修改 `source/class/extend/extend_thread_sort.php` 文件

你需要在 `extend_thread_sort` 类的 `after_newthread` 方法中添加水印处理的代码。以下是具体的代码修改步骤:

public function after_newthread() {
    global $_G;
   
    // 获取分类信息中的图片附件
    if ($_G['group']['allowimgcontent']) {
      $sortaids = intval($_GET['sortaids']);
      if ($sortaids) {
            $sortaids = explode(',', $sortaids);
            foreach ($sortaids as $aid) {
                $attachment = C::t('forum_attachment')->fetch($aid);
                if ($attachment['isimage']) {
                  // 加载图片处理类
                  require_once libfile('class/image');
                  $image = new image;
                  
                  // 反序列化图片信息
                  $imgoptiondata = dunserialize($attachment['attachment']);
                  
                  // 添加水印
                  $image->Watermark($imgoptiondata, '', 'forum');
                  
                  // 更新图片信息
                  $update = $image->imginfo;
                  C::t('forum_attachment')->update($aid, array('attachment' => serialize($update)));
                }
            }
      }
    }
}

### 2. 确保水印功能在后台已开启

虽然你希望绕过后台的水印设置,但为了确保水印功能正常工作,建议你检查一下后台的水印设置是否已经开启。你可以在后台的 `全局 -> 上传设置 -> 图片水印设置` 中查看和配置水印。

### 3. 确保分类信息图片上传功能正常

确保分类信息的上传图片功能正常,并且图片能够成功上传到服务器。如果图片上传功能有问题,水印功能也无法正常工作。

### 4. 测试功能

完成代码修改后,上传一张图片到分类信息中,检查图片是否成功添加了水印。如果水印没有添加成功,可以检查以下几点:

- 确保 `source/class/extend/extend_thread_sort.php` 文件修改正确。
- 确保图片上传功能正常。
- 确保水印图片存在且路径正确。

### 5. 其他注意事项

- 如果你使用的是自定义模板,确保模板中没有对图片上传功能进行特殊处理。
- 如果你使用的是第三方插件,确保插件没有对图片上传功能进行覆盖或修改。

### 6. 代码调试

如果仍然无法实现水印功能,可以在代码中添加调试信息,检查每一步的执行情况。例如:

print_r($attachment); // 打印附件信息
print_r($imgoptiondata); // 打印图片信息

通过调试信息,你可以更好地理解代码的执行流程,找到问题所在。

### 总结

通过以上步骤,你应该能够实现分类信息上传的图片添加水印,而附件图片不添加水印的功能。如果在实际操作中遇到问题,可以通过调试信息进一步排查问题。希望这个解决方案能够帮助你解决问题。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 分类信息上传的图片添加添加水印而附件不添加水印