分类信息上传的图片添加添加水印而附件不添加水印
如题所述:如何实现分类信息上传的图片添加水印(统一添加,直接绕过后台的水印是否设置开启)。附件图片不添加水印,这很好办到,直接关闭后台社区附件图片水印即可,但是实现分类信息图片添加水印比较困难。
根据网上找到的方法:
经过几天的代码分析,逐渐找到需要添加水印的地方,最终只添加了几行代码。
直接主题:
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的代码进行一些修改。你提到的代码修改思路是正确的,但可能在实际操作中存在一些问题。以下是一个更详细的解决方案,帮助你实现这个功能。
### 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]