PHP给图片加上图片水印和文字水印实例

下面给大家分享一下PHP给图片加上图片水印和文字水印实例,这也是网站经常用到的功能,把代码加上去,调用就很简单了。

核心代码:

  1 function imageWaterMark($groundImage, $waterPos = 0, $waterImage = "", $waterText = "", $textFont = 5, $textColor = "#FF0000") { 
  2  
  3     $isWaterImage = FALSE; 
  4  
  5     $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。"; 
  6  
  7     //读取水印文件 
  8  
  9     if (!empty($waterImage) && file_exists($waterImage)) { 
 10  
 11         $isWaterImage = TRUE; 
 12  
 13         $water_info = getimagesize($waterImage); 
 14  
 15         $water_w = $water_info[0]; //取得水印图片的宽 
 16  
 17         $water_h = $water_info[1]; //取得水印图片的高  
 18  
 19         switch ($water_info[2]) {//取得水印图片的格式 
 20             case 1:$water_im = imagecreatefromgif($waterImage); 
 21                 break; 
 22  
 23             case 2:$water_im = imagecreatefromjpeg($waterImage); 
 24                 break; 
 25  
 26             case 3:$water_im = imagecreatefrompng($waterImage); 
 27                 break; 
 28  
 29             default:die($formatMsg); 
 30         } 
 31     } 
 32  
 33     //读取背景图片 
 34  
 35     if (!empty($groundImage) && file_exists($groundImage)) { 
 36  
 37         $ground_info = getimagesize($groundImage); 
 38  
 39         $ground_w = $ground_info[0]; //取得背景图片的宽 
 40  
 41         $ground_h = $ground_info[1]; //取得背景图片的高 
 42  
 43         switch ($ground_info[2]) {//取得背景图片的格式 
 44             case 1:$ground_im = imagecreatefromgif($groundImage); 
 45                 break; 
 46  
 47             case 2:$ground_im = imagecreatefromjpeg($groundImage); 
 48                 break; 
 49  
 50             case 3:$ground_im = imagecreatefrompng($groundImage); 
 51                 break; 
 52  
 53             default:die($formatMsg); 
 54         } 
 55     } else { 
 56  
 57         die("需要加水印的图片不存在!"); 
 58     } 
 59  
 60     //水印位置 
 61  
 62     if ($isWaterImage) {//图片水印 
 63         $w = $water_w; 
 64  
 65         $h = $water_h; 
 66  
 67         $label = "图片的"; 
 68     } else {//文字水印 
 69         $temp = imagettfbbox(ceil($textFont * 5), 0, "./cour.ttf", $waterText); //取得使用 TrueType 字体的文本的范围 
 70  
 71         $w = $temp[2] - $temp[6]; 
 72  
 73         $h = $temp[3] - $temp[7]; 
 74  
 75         unset($temp); 
 76  
 77         $label = "文字区域"; 
 78     } 
 79  
 80     if (($ground_w < $w) || ($ground_h < $h)) { 
 81  
 82         echo "需要加水印的图片的长度或宽度比水印" . $label . "还小,无法生成水印!"; 
 83  
 84         return; 
 85     } 
 86  
 87     switch ($waterPos) { 
 88  
 89         case 0://随机 
 90  
 91             $posX = rand(0, ($ground_w - $w)); 
 92  
 93             $posY = rand(0, ($ground_h - $h)); 
 94  
 95             break; 
 96  
 97         case 1://1为顶端居左 
 98  
 99             $posX = 0; 
100  
101             $posY = 0; 
102  
103             break; 
104  
105         case 2://2为顶端居中 
106  
107             $posX = ($ground_w - $w) / 2; 
108  
109             $posY = 0; 
110  
111             break; 
112  
113         case 3://3为顶端居右 
114  
115             $posX = $ground_w - $w; 
116  
117             $posY = 0; 
118  
119             break; 
120  
121         case 4://4为中部居左 
122  
123             $posX = 0; 
124  
125             $posY = ($ground_h - $h) / 2; 
126  
127             break; 
128  
129         case 5://5为中部居中 
130  
131             $posX = ($ground_w - $w) / 2; 
132  
133             $posY = ($ground_h - $h) / 2; 
134  
135             break; 
136  
137         case 6://6为中部居右 
138  
139             $posX = $ground_w - $w; 
140  
141             $posY = ($ground_h - $h) / 2; 
142  
143             break; 
144  
145         case 7://7为底端居左 
146  
147             $posX = 0; 
148  
149             $posY = $ground_h - $h; 
150  
151             break; 
152  
153         case 8://8为底端居中 
154  
155             $posX = ($ground_w - $w) / 2; 
156  
157             $posY = $ground_h - $h; 
158  
159             break; 
160  
161         case 9://9为底端居右 
162  
163             $posX = $ground_w - $w - 10;   // -10 是距离右侧10px 可以自己调节 
164  
165             $posY = $ground_h - $h - 10;   // -10 是距离底部10px 可以自己调节 
166  
167             break; 
168  
169         default://随机 
170  
171             $posX = rand(0, ($ground_w - $w)); 
172  
173             $posY = rand(0, ($ground_h - $h)); 
174  
175             break; 
176     } 
177  
178     //设定图像的混色模式 
179  
180     imagealphablending($ground_im, true); 
181  
182     if ($isWaterImage) {//图片水印 
183         imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h); //拷贝水印到目标文件  
184     } else {//文字水印 
185         if (!emptyempty($textColor) && (strlen($textColor) == 7)) { 
186  
187             $R = hexdec(substr($textColor, 1, 2)); 
188  
189             $G = hexdec(substr($textColor, 3, 2)); 
190  
191             $B = hexdec(substr($textColor, 5)); 
192         } else { 
193  
194             die("水印文字颜色格式不正确!"); 
195         } 
196  
197         imagestring($ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B)); 
198     } 
199  
200     //生成水印后的图片 
201  
202     @unlink($groundImage); 
203  
204     switch ($ground_info[2]) {//取得背景图片的格式 
205         case 1:imagegif($ground_im, $groundImage); 
206             break; 
207  
208         case 2:imagejpeg($ground_im, $groundImage); 
209             break; 
210  
211         case 3:imagepng($ground_im, $groundImage); 
212             break; 
213  
214         default:die($errorMsg); 
215     } 
216  
217     //释放内存 
218  
219     if (isset($water_info)) 
220         unset($water_info); 
221  
222     if (isset($water_im)) 
223         imagedestroy($water_im); 
224  
225     unset($ground_info); 
226  
227     imagedestroy($ground_im); 
228 }

文字水印:

waterText('banner.jpg', 9, '','sucaihuo.com'); //背景图片,$waterPos水印位置,水印图片地址

图片水印:

imageWaterMark('404.jpg', 9, 'logo.gif'); //背景图片,$waterPos水印位置,水印图片地址

注意:$waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。

本文转自:https://www.sucaihuo.com/php/265.html 转载请注明出处!

文字水印

原文地址:https://www.cnblogs.com/mrlime/p/11649097.html