经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
PHP给图片加上图片水印和文字水印实例
来源:cnblogs  作者:mrlime  时间:2019/10/11 9:22:06  对本文有异议

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

核心代码:

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

文字水印:

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

图片水印:

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

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

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

文字水印

 

原文链接:http://www.cnblogs.com/mrlime/p/11649097.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号