最新最全的移动资源,海量教程攻略!

网站首页 > 技术支持 > discuz > discuz使用教程 > Discuz! X3 给缩略图加水印、保留无水印原图的方法最新

Discuz! X3 给缩略图加水印、保留无水印原图的方法最新

作者: 资源猫 时间: 2020-03-08 20:15:15 人气: 4

上传图片后,在保留原图的同时,给该图片生成带水印的缩略图和带水印的原尺寸图片各一张,一共三张图片。
这三张图片可根据不同的用户权限展示,例如缩略图供普通用户浏览(缩略图尺寸不宜过小,建议设为帖子正文宽度,720左右),而VIP会员可点击查看带水印的原尺寸图片,无水印原图可供收费下载。另外,由于缩略图一般开启了压缩,保留高质量原图可供日后使用,例如重新生成水印等。
基本条件
后台“全局-上传设置-论坛附件”中,“论坛帖子附件缩略图设置”处开启,“直接缩放原图”关闭(如果直接缩放原图,在下方保留原图代码执行前图片已经被缩放);
后台“全局-水印设置-论坛”中开启缩略图。
修改方法
注:本文代码中的“YUANTU”和“AAAA”可自定义,但须注意多处保持一致,且一旦确定不可再修改,否则将出错!
打开 source/function/function_post.php ,查找:
                                        $image- Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid], '', 'forum');
将其替换为:
                                        $opname = substr(md5('YUANTU'.$newattachfile[$aid].'AAAA'), 0, 8).'.'.array_pop(explode( . , $newattachfile[$aid])); rename($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid], $_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.'.$opname); //重命名原图
                                        $image- Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.'.$opname, 'forum/'.$newattachfile[$aid], 'forum'); //生成带水印的原尺寸图片
                                        if(file_exists($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.thumb.jpg')) $image- Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.thumb.jpg', '', 'forum'); //给缩略图添加水印
此代码先重命名原图,在名称末尾加入加密后缀,便于权限控制(避免用户根据缩略图地址找到原图),然后再在此图片上另外生成带水印的全尺寸图片。还有一种方法是直接复制原图为原图2,然后在原图上加水印,代码更简单,但复制过程可能更消耗系统资源,代码如下仅供参考:
                                        copy($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid], $_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.'.substr(md5('YUANTU'.$newattachfile[$aid].'AAAA'), 0, 8).'.'.array_pop(explode( . , $newattachfile[$aid]))); //复制保留原图
                                        $image- Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid], '', 'forum');
打开 source/function/function_forum.php ,查找:
                $havethumb @unlink($_G['setting']['attachdir'].'/forum/'.getimgthumbname($filename));
在其下方新增:
                @unlink($_G['setting']['attachdir'].'/forum/'.$filename.'.'.substr(md5('YUANTU'.$filename.'AAAA'), 0, 8).'.'.array_pop(explode( . , $filename))); //删除原图
增加下载图片扣积分
请参考 Discuz! X3 下载图片不扣积分的解决方法 。
增加下载图片扣积分后,请在模板中去掉原图链接,否则用户无需查看即可下载。
下载原图
按上一步方法修改后,下载到的是带水印的全尺寸图片,怎样让用户下载到无水印原图呢?
打开 source/module/forum/forum_attachment.php 文件,查找:
if($isimage) {
        dheader('Content-Type: image');
在其下方增加:
        $opname = substr(md5('YUANTU'.$attach['attachment'].'AAAA'), 0, 8).'.'.array_pop(explode( . , $attach['attachment']));
        $opfilename = $_G['setting']['attachdir'].'/forum/'.$attach['attachment'].'.'.$opname;
        if(file_exists($opfilename)) {
                $filename = $opfilename;
                $attach['attachment'] = $attach['attachment'].'.'.$opname;
                $filesize = filesize($filename);
        }
您可以根据自己的需要,在这段新增的代码外添加其它判断,例如判断用户是否是VIP会员,如果是则获得无水印原图,不是则获得带水印的全尺寸图片。

感谢访问资源猫吧,本站所有资源均来自互联网或用户分享,如您发现本站存在侵权或违规内容,请来邮件告知我们! 资源分享/侵权下架/商务合作联系邮箱:qiazou77ziyuan@126.com