Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[修改] 这样的水印大家喜欢么?(支持6.1.0)

[复制链接]
barracuda 发表于 2008-7-19 12:13:59 | 显示全部楼层 |阅读模式

为了证明是不损坏原图的前提下,所以截了一张几年前玩系统美化的时候的图片,版权信息在任务栏下方.

喜欢的才往下看:

discuz自带的水印都会破坏原来图片的可视情况.所以直接不考虑discuz自带的方式.突然想起来铁血那样的添加方式不错,直接在图片底下加上水印,不破坏原来图片的前提下还在一定程度上保留了版权信息.

找了段时间,从这个帖子(https://discuz.dismall.com/thread-483687-1-1.html)那得到了启示,不晓得这个帖子的作者保留不保留版权,不保留的话我也不保留版版权了.虽然说基础差不多,但是算法和实现方法完全是两种完全不同的方式.也算不上是抄袭了.

以下是正题:
1.首先备份修改文件bbs/admin/settings.inc.php还有/include/image.class.php

2.修改文件bbs/admin/中的 settings.inc.php
查找:
  1. <td><input class="radio" type="radio" name="settingsnew[watermarkstatus]" value="9" '.$checkwm[9].'> #9</td>
复制代码
后面添加:
  1. <td><input class="radio" type="radio" name="settingsnew[watermarkstatus]" value="10" '.$checkwm[10].'> #10</td>
复制代码
这段代码的意思很简单,就是说在原本9种水印添加方式的情况下,添加一个第十种而已...

3.修改文件:/include/image.class.php
查找:
  1. if(!defined('IN_DISCUZ')) {
  2.         exit('Access Denied');
  3. }
复制代码
后面添加:
  1. //该函数是从网上找到,归原作者所有
  2. function GBKToUnicode(&$String)
  3.         {
  4.           $UnicodeData=file(DISCUZ_ROOT."./include/gbkunicode.data");
  5.                 $ReturnString="";
  6.                 $StringLength=strlen($String);
  7.                 $p="";
  8.                 $q="";
  9.                 for($i=0;$i<$StringLength;$i++){
  10.                         if(($p=ord(substr($String,$i,1)))>128){
  11.                                 $q=ord(substr($String,++$i,1));
  12.                                 if ($p>254) {
  13.                                     $ReturnString.='&#'.hexdec('003f').';';
  14.                                 }
  15.                                 elseif ($q<64||$q>254) {
  16.                                     $ReturnString.='&#'.hexdec('003f').';';
  17.                                 }
  18.                                 else {
  19.                                         $q=($q-64)*4;
  20.                                         $ReturnString.='&#'.hexdec(substr($UnicodeData[$p-128],$q,4)).';';
  21.                                 }
  22.                         }
  23.                         else {
  24.                                 if ($p==128) {
  25.                                     $ReturnString.='&#'.hexdec('20ac').';';
  26.                                 }
  27.                                 else {
  28.                                         $ReturnString.='&#'.$p.';';
  29.                                 }
  30.                         }
  31.                 }
  32.                 return $ReturnString;
  33. }
复制代码
这个是个字符转换的,从函数名称也知道,GBK TO UNICODE.

继续查找:
  1. imageAlphaBlending($watermark_logo, true);
  2. imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $watermarktrans);
复制代码
替换成:
  1. //类铁血水印开始 Powered By Barracuda@江西校园http://www.jx4n.com
  2.                                                                                                                                                                                                 imageAlphaBlending($watermark_logo, true);
  3.                                                 
  4.                                                 if($watermarkstatus == 10) {
  5.                                                         
  6.                                                         //计算黑色的方框的参数
  7.                                                         $bg_x1 = 0;
  8.                                                         $bg_y1 = $img_h;
  9.                                                         $bg_x2 = $img_w;
  10.                                                         $bg_y2 = $img_h + $logo_h + 8;
  11.                                                                                                                                                                                                                                 $watermarked = @imagecreatetruecolor ($img_w, $img_h + $logo_h + 15);
  12.                                                         $bg_color = imagecolorallocate($dst_photo, 0, 0, 0); //这里参数0-255,对应颜色R/G/B
  13.                                                          //生成新图片
  14.                                                          imagecopymerge ( $watermarked, $dst_photo, 0, 0, 0, 0, $img_w, $img_h, 100);
  15.                                                         
  16.                                                         //在底部画黑色方框
  17.                                                         imagefilledrectangle($watermarked, $bg_x1, $bg_y1, $bg_x2, $bg_y2, $bg_color);
  18.                                                         
  19.                                                         //logo位置
  20.                                                         imageCopyMerge($watermarked, $watermark_logo, $bg_x1 + 10,        $bg_y1 + 5, 0, 0, $logo_w, $logo_h, $watermarktrans);
  21.                                                         
  22.                                                         global $discuz_user;
  23.                                                         
  24.                                                         //文字内容                                                                                 
  25.                                                         $text = "本图片由 $discuz_user 上传到江西校园http://www.jx4n.com ".date('y年n月j日-H点m分', time());                                                        
  26.                                                         $font = './images/fonts/ch/simsun.ttf';        //字体参数
  27.                                                         $text_h = 10;         //文字高度
  28.                                                         $text_x = round(($img_w - ($logo_w + 20 )) / 2) + ($logo_w + 20) - round(($text_h * strlen($text)) / 2);     //文字的X轴位置,如果你的论坛的图片大多都小于宽320的话,写成这样$text_x = round($logo_w + 20 );                                                        $text_y = round(($bg_y2 - $bg_y1 - $text_h) / 2) + $bg_y1 + 13;        
  29.                                                         $text_color = imagecolorallocate($watermarked, 0xff, 0xff, 0xff);                //0xff是255的十六进制,你也可以直接用255,这里参数0-255,对应颜色R/G/B               
  30.                                                         //imagestring($dst_photo, $font, $text_x, $text_y, $text, $text_color);        
  31.                                                         $text = GBKToUnicode($text);                                                
  32.                                                         imagettftext($watermarked, $text_h, 0, $text_x, $text_y, $text_color, $font, $text);
  33.                                                          
  34.                                                         
  35.                                                 } else {                                                
  36.                                                         imageCopyMerge($dst_photo, $watermark_logo, $x,        $y, 0, 0, $logo_w, $logo_h, $watermarktrans);
  37.                                                 }
  38.                                                 $dst_photo = $watermarked;
  39.                                                 //类铁血水印结束
  40.                                 }
复制代码
这段代码的意思是如果选择的水印添加方式是10的话,那么就使用以上的函数来添加水印.

4.所用到的simsun.ttc为宋体字体,请到本地电脑里面c:\windows\fonts下面找到宋体&新宋体,复制到/images/fonts/ch/即可;simsun.ttc重命名为的simsun.ttf

5.上传此附件到论坛 /include文件夹


然后就是自己调整字体大小黑框啥的,代码里都有注释了.如果你不想有logo图标的话,就用个1*1的gif图片去代替/images/common/watermark.gif
其他的什么增大缩小图片你们就自己弄了哈...我美工不行的.

图片水印设置如图




没有修改过这两个文件的朋友或者怕麻烦的朋友可以直接替换这个.


本人的其他插件
添加wap发帖标记的方法:https://discuz.dismall.com/thread-970888-1-1.html

本人的网站:http://www.jx4n.com 我不需要纯IP.因为我没挂广告,所以白来的IP对我没啥好处.我需要的是意见,还有推荐高手教我做下推广...现在我的站人气真的是低的可以...谢谢大家了

[ 本帖最后由 barracuda 于 2008-7-19 19:16 编辑 ]
潮儿 发表于 2008-7-19 12:41:34 | 显示全部楼层
不错    顶个。。。。。。。。                          
回复

使用道具 举报

tyiweb 发表于 2008-7-19 12:56:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

qq9688 发表于 2008-7-19 12:58:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

feifeimama 发表于 2008-7-19 16:03:50 | 显示全部楼层
UTF8用不成的
回复

使用道具 举报

builderman 发表于 2008-7-19 16:53:07 | 显示全部楼层
好东西
不知道能不能弄个在6.0下用的
回复

使用道具 举报

汉川水缘 发表于 2008-7-19 17:35:47 | 显示全部楼层
支持!

试试看!
回复

使用道具 举报

ideacm 发表于 2008-7-19 17:47:35 | 显示全部楼层
楼主强大 这个很棒!

To 楼主(200年7月24日 22:48):你的附件包和你贴上来的这个代码确实不一致,按照你的步骤和使用你贴出的代码来操作,确实不显示黑条上的文字,但是使用你的文件覆盖就正常。

且你这个好像无法居中显示,根据各种大小的图片,文字显示的位置都不同。时常只有部分文字在水印上。总之很感谢你提供这么好的东西。

[ 本帖最后由 ideacm 于 2008-7-24 22:50 编辑 ]
回复

使用道具 举报

汉川水缘 发表于 2008-7-19 18:01:42 | 显示全部楼层


测试成功!

谢谢楼主了!
回复

使用道具 举报

hb163 发表于 2008-7-19 18:23:49 | 显示全部楼层
好东西..一定支持.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-9-22 03:47 , Processed in 0.134107 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表