激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP添加文字水印或圖片水印的水印類完整源代碼與使用示例

PHP添加文字水印或圖片水印的水印類完整源代碼與使用示例

2021-07-25 17:44CODETC PHP教程

今天小編就為大家分享一篇關于PHP添加文字水印或圖片水印的水印類完整源代碼與使用示例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

PHP實現的給圖片添加水印功能,可添加文字水印或圖片水印,使用文字水印時需要提供字體文件,使用圖片水印時需要提供水印圖片,水印圖片不能比要添加水印的圖片大,請使用背景透明的水印圖片。

該水印類支持自定義水印位置、自定義水印大小和水印的透明度,字體水印可自定義顏色等,功能已相應完善。

完整源代碼如下(注解中已給出使用示例):

?
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
162
163
164
<?php
/**
 * 圖片加水印類,支持文字水印、透明度設置、自定義水印位置等。
 * 使用示例:
 *   $obj = new WaterMask($imgFileName);  //實例化對象
 *   $obj->$waterType = 1;   //類型:0為文字水印、1為圖片水印
 *   $obj->$transparent = 45;   //水印透明度
 *   $obj->$waterStr = 'www.zmynmublwnt.cn';  //水印文字
 *   $obj->$fontSize = 18;   //文字字體大小
 *   $obj->$fontColor = array(255,255,255);  //水印文字顏色(RGB)
 *   $obj->$fontFile = 'AHGBold.ttf';  //字體文件
 * ……
 *   $obj->output();    //輸出水印圖片文件覆蓋到輸入的圖片文件
 */
class WaterMask{
  public $waterType     = 0;   //水印類型:0為文字水印、1為圖片水印
  public $pos        = 0;   //水印位置
  public $transparent    = 45;   //水印透明度
  public $waterStr      = 'www.zmynmublwnt.cn'//水印文字
  public $fontSize      = 18;   //文字字體大小
  public $fontColor     = array(255,255,255);  //水印文字顏色(RGB)
  public $fontFile      = 'AHGBold.ttf'//字體文件
  public $waterImg      = 'logo.png'//水印圖片
  private $srcImg       = '';   //需要添加水印的圖片
  private $im         = '';   //圖片句柄
  private $water_im      = '';   //水印圖片句柄
  private $srcImg_info    = '';   //圖片信息
  private $waterImg_info   = '';   //水印圖片信息
  private $str_w       = '';   //水印文字寬度
  private $str_h       = '';   //水印文字高度
  private $x         = '';   //水印X坐標
  private $y         = '';   //水印y坐標
  function __construct($img) {    //析構函數
    $this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!');
  }
  private function imginfo() { //獲取需要添加水印的圖片的信息,并載入圖片。
    $this->srcImg_info = getimagesize($this->srcImg);
    switch ($this->srcImg_info[2]) {
      case 3:
        $this->im = imagecreatefrompng($this->srcImg);
        break 1;
      case 2:
        $this->im = imagecreatefromjpeg($this->srcImg);
        break 1;
      case 1:
        $this->im = imagecreatefromgif($this->srcImg);
        break 1;
      default:
        die('原圖片('.$this->srcImg.')格式不對,只支持PNG、JPEG、GIF。');
    }
  }
  private function waterimginfo() { //獲取水印圖片的信息,并載入圖片。
    $this->waterImg_info = getimagesize($this->waterImg);
    switch ($this->waterImg_info[2]) {
      case 3:
        $this->water_im = imagecreatefrompng($this->waterImg);
        break 1;
      case 2:
        $this->water_im = imagecreatefromjpeg($this->waterImg);
        break 1;
      case 1:
        $this->water_im = imagecreatefromgif($this->waterImg);
        break 1;
      default:
        die('水印圖片('.$this->srcImg.')格式不對,只支持PNG、JPEG、GIF。');
    }
  }
  private function waterpos() { //水印位置算法
    switch ($this->pos) {
      case 0:   //隨機位置
        $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);
        $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);
        break 1;
      case 1:   //上左
        $this->x = 0;
        $this->y = 0;
        break 1;
      case 2:   //上中
        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
        $this->y = 0;
        break 1;
      case 3:   //上右
        $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
        $this->y = 0;
        break 1;
      case 4:   //中左
        $this->x = 0;
        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
        break 1;
      case 5:   //中中
        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
        break 1;
      case 6:   //中右
        $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;
        break 1;
      case 7:   //下左
        $this->x = 0;
        $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
        break 1;
      case 8:   //下中
        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;
        $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
        break 1;
      default//下右
        $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];
        $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];
        break 1;
    }
  }
  private function waterimg() {
    if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){
      die('水印比原圖大!');
    }
    $this->waterpos();
    $cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);
    imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);
    $pct = $this->transparent;
    imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);
    imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);
  }
  private function waterstr() {
    $rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);
    $w = abs($rect[2]-$rect[6]);
    $h = abs($rect[3]-$rect[7]);
    $fontHeight = $this->fontSize;
    $this->water_im = imagecreatetruecolor($w, $h);
    imagealphablending($this->water_im,false);
    imagesavealpha($this->water_im,true);
    $white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127);
    imagefill($this->water_im,0,0,$white_alpha);
    $color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);
    imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);
    $this->waterImg_info = array(0=>$w,1=>$h);
    $this->waterimg();
  }
  function output() {
    $this->imginfo();
    if ($this->waterType == 0) {
      $this->waterstr();
    }else {
      $this->waterimginfo();
      $this->waterimg();
    }
    switch ($this->srcImg_info[2]) {
      case 3:
        imagepng($this->im,$this->srcImg);
        break 1;
      case 2:
        imagejpeg($this->im,$this->srcImg);
        break 1;
      case 1:
        imagegif($this->im,$this->srcImg);
        break 1;
      default:
        die('添加水印失敗!');
        break;
    }
    imagedestroy($this->im);
    imagedestroy($this->water_im);
  }
}
?>

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

原文鏈接:http://www.codetc.com/article-95-1.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕欧美亚洲 | 蜜桃久久一区二区三区 | 亚洲成人在线视频网 | 国产精品二区高清在线 | 久久2019中文字幕 | 国产亚洲精品综合一区91 | 99seav| 99欧美视频 | 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 成人啪啪18免费网站 | 大片毛片 | xvideos korean| 久久久一区二区三区精品 | 国产91成人 | 意大利av在线 | 91av在线免费 | 久久亚洲成人 | 精品91av| 日韩精品中文字幕一区二区三区 | 牛牛碰在线视频 | 视频一区国产 | 久啪视频| 久久成人国产精品入口 | 久久久久在线观看 | av在线高清观看 | 国产99视频在线观看 | www.99av| 国产理论视频在线观看 | 久久国产精品电影 | 空姐一级毛片 | 久久国产免费视频 | 中文字幕在线播放不卡 | 久久99精品视频在线观看 | 黄色免费网站在线播放 | 欧美成人性生活片 | 欧美.com | 91青青| 欧美五月婷婷 | 日本特级a一片免费观看 | 久久99精品久久久久久236 | 日本久久视频 |