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

来自版块 Discuz教程
439
0
温馨提示:如下载链接失效,请前往 问题反馈专用帖 进行反馈! 兔源码交流群:493651246
达成效果
上传图片后,在保留原图的同时,给该图片生成带水印的缩略图和带水印的原尺寸图片各一张,一共三张图片。
这三张图片可根据不同的用户权限展示,例如缩略图供普通用户浏览(缩略图尺寸不宜过小,建议设为帖子正文宽度,720左右),而VIP会员可点击查看带水印的原尺寸图片,无水印原图可供收费下载。另外,由于缩略图一般开启了压缩,保留高质量原图可供日后使用,例如重新生成水印等。
基本条件
后台“全局-上传设置-论坛附件”中,“论坛帖子附件缩略图设置”处开启,“直接缩放原图”关闭(如果直接缩放原图,在下方保留原图代码执行前图片已经被缩放);
后台“全局-水印设置-论坛”中开启缩略图。
修改方法
注:本文代码中的“YUANTU”和“AAAA”可自定义,但须注意多处保持一致,且一旦确定不可再修改,否则将出错!
打开 source/function/function_post.php ,查找:
  1.                                         $image->Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid], '', 'forum');
复制代码
将其替换为:
  1.                                         $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); //重命名原图
  2.                                         $image->Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.'.$opname, 'forum/'.$newattachfile[$aid], 'forum'); //生成带水印的原尺寸图片
  3.                                         if(file_exists($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.thumb.jpg')) $image->Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid].'.thumb.jpg', '', 'forum'); //给缩略图添加水印
复制代码

此代码先重命名原图,在名称末尾加入加密后缀,便于权限控制(避免用户根据缩略图地址找到原图),然后再在此图片上另外生成带水印的全尺寸图片。还有一种方法是直接复制原图为原图2,然后在原图上加水印,代码更简单,但复制过程可能更消耗系统资源,代码如下仅供参考:
  1.                                         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]))); //复制保留原图
  2.                                         $image->Watermark($_G['setting']['attachdir'].'/forum/'.$newattachfile[$aid], '', 'forum');
复制代码
打开 source/function/function_forum.php ,查找:
  1.                 $havethumb && @unlink($_G['setting']['attachdir'].'/forum/'.getimgthumbname($filename));
复制代码
在其下方新增:
  1.                 @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 文件,查找:
  1. if($isimage) {
  2.         dheader('Content-Type: image');
  3. 在其下方增加:

  4.         $opname = substr(md5('YUANTU'.$attach['attachment'].'AAAA'), 0, 8).'.'.array_pop(explode(".", $attach['attachment']));
  5.         $opfilename = $_G['setting']['attachdir'].'/forum/'.$attach['attachment'].'.'.$opname;
  6.         if(file_exists($opfilename)) {
  7.                 $filename = $opfilename;
  8.                 $attach['attachment'] = $attach['attachment'].'.'.$opname;
  9.                 $filesize = filesize($filename);
  10.         }
复制代码
您可以根据自己的需要,在这段新增的代码外添加其它判断,例如判断用户是否是VIP会员,如果是则获得无水印原图,不是则获得带水印的全尺寸图片。

全部评论 0

您需要登录后才可以回帖 立即登录
输入你要评论的内容......
0
0
0
返回顶部