Ueditor上传图片自动添加水印(通用图片文件)javascript

/ / 2023-10-09   阅读:2558
Ueditor上传图片自动添加水印(通用图片文件)...

1、找到config.json,在配置文件中新增水印效果

1
2
3
4
5
6
7
 /* 上传图片配置项 */
    "imageWater""true",/*******************新增图片水印设置  这里是新增*/
    "imageActionName""uploadsimage"/* 执行上传图片的action名称 */
    "imageFieldName""upfile"/* 提交的图片表单名称 * /* 上传图片配置项 */
    "imageWater""true",/*******************新增图片水印设置  这里是新增*/
    "imageActionName""uploadsimage"/* 执行上传图片的action名称 */
    "imageFieldName""upfile"/* 提交的图片表单名称 */复制代码/复制代码


2、找到php目录下的 action_uploads.php 文件

(1)在上传文件的时候读取配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
/* 上传配置 */
$base64 = "uploads";
switch (htmlspecialchars($_GET['action'])) {
    case 'uploadsimage':
        $config = array(
            "pathFormat" => $CONFIG['imagePathFormat'],
            "maxSize" => $CONFIG['imageMaxSize'],
            "allowFiles" => $CONFIG['imageAllowFiles']
        );
        $watermark = $CONFIG['imageWater']; //************************新增读取参数
        $fieldName = $CONFIG['imageFieldName'];
        break;
    case 'uploadsscrawl':


(2)在实例化的时候传入配置参数

1
$up = new uploadser($fieldName, $config, $base64,$watermark); // 最后的参数是新增


3、找到php同级目录下的类 uploadser.class.php 

(1)实例化类的时候新增私有属性

1
2
3
class uploadser
{
    private $water//是否添加水印(属性) *******************新增


(2)在构造函数中添加传递的参数,新增最后一个参数

1
2
3
4
public function __construct($fileField$config$type "uploads",$watermark = false)
    {
        $this->water = $watermark;
        $this->fileField = $fileField;


(3)在文件上传完成之后 upFile方法 的最后添加

1
2
3
4
5
6
7
8
9
10
    //移动文件
        if (!(move_uploadsed_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移动失败
            $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
        else //移动成功
            $this->stateInfo = $this->stateMap[0];
        }
        //********************新增
        if$this->water ){
            $this->watermark($this->filePath,$this->filePath);
        }


(4)添加水印函数和检测文件是否存在函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
    * 图片加水印
    * $source  string  图片资源
    * $target  string  添加水印后的名字
    * $w_pos   int     水印位置 具体看代码
    * $w_img   string  水印图片路径
    * $w_text  string  显示的文字
    * $w_font  int     字体大小
    * $w_color string  字体颜色
    */
    private function watermark($source$target ''$w_pos ''$w_img ''$w_text 'zhiwuhao.com',$w_font = 10, $w_color '#CC0000') {
        $this->w_img = 'logo.png';//水印图片的路径
        $this->w_pos = 9;
        $this->w_minwidth = 400;//最少宽度
        $this->w_minheight = 200;//最少高度
        $this->w_quality = 80;//图像质量
        $this->w_pct = 85;//透明度
        $w_pos $w_pos $w_pos $this->w_pos;
        $w_img $w_img $w_img $this->w_img;
        if(!$this->check($source)) return false;
        if(!$target$target $source;
        $source_info getimagesize($source);//图片信息
        $source_w  $source_info[0];//图片宽度
        $source_h  $source_info[1];//图片高度
        if($source_w $this->w_minwidth || $source_h $this->w_minheight) return false;
        switch($source_info[2]) { //图片类型
            case 1 : //GIF格式
                $source_img = imagecreatefromgif($source);
                break;
            case 2 : //JPG格式
                $source_img = imagecreatefromjpeg($source);
                break;
            case 3 : //PNG格式
                $source_img = imagecreatefrompng($source);
                //imagealphablending($source_img,false); //关闭混色模式
                imagesavealpha($source_img,true); //设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息(与单一透明色相反)
                break;
            default :
                return false;
        }
        if(!empty($w_img) && file_exists($w_img)) { //水印图片有效
            $ifwaterimage = 1; //标记
            $water_info  getimagesize($w_img);
            $width    $water_info[0];
            $height    $water_info[1];
            switch($water_info[2]) {
                case 1 :
                    $water_img = imagecreatefromgif($w_img);
                    break;
                case 2 :
                    $water_img = imagecreatefromjpeg($w_img);
                    break;
                case 3 :
                    $water_img = imagecreatefrompng($w_img);
                    imagealphablending($w_img,false);
                    imagesavealpha($w_img,true);
                    break;
                default :
                    return;
            }
        }else{
            $ifwaterimage = 0;
            $temp = imagettfbbox(ceil($w_font*2.5), 0, '../../texb.ttf'$w_text); //imagettfbbox返回一个含有 8 个单元的数组表示了文本外框的四个角
            $width $temp[2] - $temp[6];
            $height $temp[3] - $temp[7];
            unset($temp);
        }
        switch($w_pos) {
            case 1:
                $wx = 5;
                $wy = 5;
                break;
            case 2:
                $wx = ($source_w $width) / 2;
                $wy = 0;
                break;
            case 3:
                $wx $source_w $width;
                $wy = 0;
                break;
            case 4:
                $wx = 0;
                $wy = ($source_h $height) / 2;
                break;
            case 5:
                $wx = ($source_w $width) / 2;
                $wy = ($source_h $height) / 2;
                break;
            case 6:
                $wx $source_w $width;
                $wy = ($source_h $height) / 2;
                break;
            case 7:
                $wx = 0;
                $wy $source_h $height;
                break;
            case 8:
                $wx = ($source_w $width) / 2;
                $wy $source_h $height;
                break;
            case 9:
                $wx $source_w - ($width+5);
                $wy $source_h - ($height+5);
                break;
            case 10:
                $wx = rand(0,($source_w $width));
                $wy = rand(0,($source_h $height));
                break;
            default:
                $wx = rand(0,($source_w $width));
                $wy = rand(0,($source_h $height));
                break;
        }
        if($ifwaterimage) {
            if($water_info[2] == 3) {
                imagecopy($source_img$water_img$wx$wy, 0, 0, $width$height);
            }else{
                imagecopymerge($source_img$water_img$wx$wy, 0, 0, $width$height$this->w_pct);
            }
        }else{
            if(!empty($w_color) && (strlen($w_color)==7)) {
                $r = hexdec(substr($w_color,1,2));
                $g = hexdec(substr($w_color,3,2));
                $b = hexdec(substr($w_color,5));
            }else{
                return;
            }
            imagestring($source_img,$w_font,$wx,$wy,$w_text,imagecolorallocate($source_img,$r,$g,$b));
        }
        switch($source_info[2]) {
            case 1 :
                imagegif($source_img$target);
                //GIF 格式将图像输出到浏览器或文件(欲输出的图像资源, 指定输出图像的文件名)
                break;
            case 2 :
                imagejpeg($source_img$target$this->w_quality);
                break;
            case 3 :
                imagepng($source_img$target);
                break;
            default :
                return;
        }
        if(isset($water_info)){
            unset($water_info);
        }
        if(isset($water_img)) {
            imagedestroy($water_img);
        }
        unset($source_info);
        imagedestroy($source_img);
        return true;
    }
    /**
     * 检测文件是否存在
     * @param $image
     * @return bool
     */
    public function check($image){
        return extension_loaded('gd') && preg_match("/\.(jpg|jpeg|gif|png)/i"$image$m) && file_exists($image) && function_exists('imagecreatefrom'.($m[1] == 'jpg' 'jpeg' $m[1]));
    }


注意:以上代码会提示一个错误

imagealphablending() expects parameter 1 to be resource

imagesavealpha() expects parameter 1 to be resource


在这个位置:

1.jpg


这个错误是因为 imagealphablending()imagesavealpha() 这两个函数需要传递一个图像资源作为参数,但是在代码中传递的参数 $w_img 是一个字符串(水印图片的路径),而不是一个图像资源。

你需要将这两个函数的参数改为 $water_img,也就是水印图片创建的图像资源。同时,你需要修改以下代码:

1
2
3
$water_img = imagecreatefrompng($w_img);
imagealphablending($water_img, false);
imagesavealpha($water_img, true);

修改后的代码如下:

1
2
3
$water_img = imagecreatefrompng($w_img);
imagealphablending($source_img, false);
imagesavealpha($source_img, true);


我要评论

昵称:
验证码:

最新评论

共0条 共0页 10条/页 首页 上一页 下一页 尾页
意见反馈