Discuz!让水印平铺和随机9个位置打水印的修改方法

今天把我收集的两种给discuz打水印的方法分享一下,一种是让水印平铺。还有一种是让水印在9个位置随机打,我们知道DZ可以设置9个位置的水印,但是有时候还是感觉太单一,大图打一个没效果,那么今天这两种方法就有用了。

Discuz!让水印平铺的修改方法

修改文件:\source\class\class_image.php

修改原理:计算水印大小和图片大小,每次偏移一个水印的位置重复打水印;

由于discuz支持png和gif两种水印,因此本方法涉及两处修改:
修改1属于支持png水印,修改2属于支持gif水印;

支持png水印修改1:大概第475行原始代码

1
2
3
if($this->param['watermarktype'][$type] == 'png') {
    imageCopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h);
}

修改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if($this->param['watermarktype'][$type] == 'png') {
    //修改1 开始
    //imageCopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h);
    if(intval($this->imginfo['width']/$logo_w)>=3){
        $wblank=($logo_w+$this->imginfo['width']%$logo_w)/intval($this->imginfo['width']/$logo_w);
        $hblank=($logo_h+$this->imginfo['height']%$logo_h)/intval($this->imginfo['height']/$logo_h);
        for($x = $wblank;$x+$logo_w<=$this->imginfo['width'];$x=$x+$logo_w+$wblank){
            for($y = $hblank;$y+$logo_h<=$this->imginfo['height'];$y=$y+$logo_h+$hblank){
                imageCopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h);
            }
        }  
    }else{
        for($x = 5;$x+$logo_w<=$this->imginfo['width'];$x=$x+$logo_w+10){
            for($y = 5;$y+$logo_h<=$this->imginfo['height'];$y=$y+$logo_h+10){
                imageCopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h);
            }
        }
    }  
    //修改1 结束
}

支持gif水印修改2:大概500行,原始代码为:

1
2
3
4
else {
    imageAlphaBlending($watermark_logo, true);             
    imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $this->param['watermarktrans'][$type]);
}

修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
else {
    imageAlphaBlending($watermark_logo, true);
    //修改2 开始
    if(intval($this->imginfo['width']/$logo_w)>=3){
        $wblank=($logo_w+$this->imginfo['width']%$logo_w)/intval($this->imginfo['width']/$logo_w);
        $hblank=($logo_h+$this->imginfo['height']%$logo_h)/intval($this->imginfo['height']/$logo_h);
        for($x = $wblank;$x+$logo_w<=$this->imginfo['width'];$x=$x+$logo_w+$wblank){
            for($y = $hblank;$y+$logo_h<=$this->imginfo['height'];$y=$y+$logo_h+$hblank){
                imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $this->param['watermarktrans'][$type]);
            }
        }  
    }else{
        for($x = 5;$x+$logo_w<=$this->imginfo['width'];$x=$x+$logo_w+10){
            for($y = 5;$y+$logo_h<=$this->imginfo['height'];$y=$y+$logo_h+10){
                imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $this->param['watermarktrans'][$type]);
            }
        }
    }                  
    //imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $this->param['watermarktrans'][$type]);
    //修改2 结束
}

修改后的水印平铺效果

DZ水印平铺效果

Discuz!让水印任意(随机)位置修改方法

DZ打水印随机位置

打开文件/source/class/class_image.php (修改前请提前备份该文件)搜索代码(总共两处):

1
switch($this->param['watermarkstatus'][$type])

替换为:

1
switch(rand(1,9))

然后保存上传到FTP即可!前台发帖,就会发现水印将随机出现在图片的如下图9个位置:
9个位置的水印

当然,后台的水印位置设置不再生效,全部为随机水印(包括门户文章!),这样就可以很好的保护我们网站的帖子,增大复制者的复制难度了!

Leave a Reply

You must be logged in to post a comment.

RSS feed for comments on this post. TrackBack URL