·您当前的位置:主页 > 技术教程 > PHP教程 >

[php]最新kindeditor上传图片加水印功能的实例代码

时间:2014-09-22 11:00188bet开户
[php]最新kindeditor上传图片加水印功能的实例代码,主要修改upload_json.php文件,首先在upload_json.php文件中添加水印函数

[php]最新kindeditor上传图片加水印功能的实例代码,主要修改upload_json.php文件,首先在upload_json.php文件中添加水印函数:

  1. /* 
  2. * 功能:PHP图片水印 (水印支持图片或文字) 
  3. * 参数: 
  4. * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; 
  5. * $waterPos 水印位置,有10种状态,0为随机位置; 
  6. * 1为顶端居左,2为顶端居中,3为顶端居右; 
  7. * 4为中部居左,5为中部居中,6为中部居右; 
  8. * 7为底端居左,8为底端居中,9为底端居右; 
  9. * $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式; 
  10. * $alpha 水印透明度 
  11. * $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文; 
  12. * $textFont 文字大小,值为1、2、3、4或5,默认为5; 
  13. * $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色); 
  14. * 注意: Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG 
  15. * $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。 
  16. * 当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。 
  17. * 加水印后的图片的文件名和 $groundImage 一样。 
  18. */ 
  19. function imageWaterMark($groundImage, $waterPos=0, $waterImage='', $alpha=80, $waterText='', $water_fontfile, $textFont=9, $textColor='#FF0000'){ 
  20. $isWaterImage = FALSE
  21. $formatMsg = '暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。'
  22. $fontFile = $water_fontfile; 
  23. //读取水印文件 
  24. if(!empty($waterImage) && file_exists($waterImage)){ 
  25. $isWaterImage = TRUE
  26. $water_info = getimagesize($waterImage); 
  27. $water_w = $water_info[0];//取得水印图片的宽 
  28. $water_h = $water_info[1];//取得水印图片的高 
  29. switch($water_info[2])//取得水印图片的格式 
  30. case 1:$water_im = imagecreatefromgif($waterImage);break; 
  31. case 2:$water_im = imagecreatefromjpeg($waterImage);break; 
  32. case 3:$water_im = imagecreatefrompng($waterImage);break; 
  33. default:die($formatMsg); 
  34. //读取背景图片 
  35. if(!empty($groundImage) && file_exists($groundImage)){ 
  36. $ground_info = getimagesize($groundImage); 
  37. $ground_w = $ground_info[0];//取得背景图片的宽 
  38. $ground_h = $ground_info[1];//取得背景图片的高 
  39. switch($ground_info[2])//取得背景图片的格式 
  40. case 1:$ground_im = imagecreatefromgif($groundImage);break; 
  41. case 2:$ground_im = imagecreatefromjpeg($groundImage);break; 
  42. case 3:$ground_im = imagecreatefrompng($groundImage);break; 
  43. default:die($formatMsg); 
  44. }else{ 
  45. alert("需要加水印的图片不存在!"); 
  46. //水印位置 
  47. if($isWaterImage)//图片水印 
  48. $w = $water_w; 
  49. $h = $water_h; 
  50. $label = "图片的"
  51. }else{//文字水印 
  52. $temp = imagettfbbox($textFont, 0, $fontFile, $waterText);//取得使用 TrueType 字体的文本的范围 
  53. $w = $temp[2] - $temp[6]; 
  54. $h = $temp[3] - $temp[7]; 
  55. unset($temp); 
  56. $label = "文字区域"
  57. if(($ground_w<$w) || ($ground_h<$h)){ 
  58. echo "需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!"; 
  59. return; 
  60. switch($waterPos) 
  61. case 0://随机 
  62. $posX = rand(0,($ground_w - $w)); 
  63. $posY = rand(0,($ground_h - $h)); 
  64. break; 
  65. case 1://1为顶端居左 
  66. $posX = 0
  67. $posY = 0
  68. break; 
  69. case 2://2为顶端居中 
  70. $posX = ($ground_w - $w) / 2; 
  71. $posY = 0
  72. break; 
  73. case 3://3为顶端居右 
  74. $posX = $ground_w - $w; 
  75. $posY = 0
  76. break; 
  77. case 4://4为中部居左 
  78. $posX = 0
  79. $posY = ($ground_h - $h) / 2; 
  80. break; 
  81. case 5://5为中部居中 
  82. $posX = ($ground_w - $w) / 2; 
  83. $posY = ($ground_h - $h) / 2; 
  84. break; 
  85. case 6://6为中部居右 
  86. $posX = $ground_w - $w; 
  87. $posY = ($ground_h - $h) / 2; 
  88. break; 
  89. case 7://7为底端居左 
  90. $posX = 0
  91. $posY = $ground_h - $h; 
  92. break; 
  93. case 8://8为底端居中 
  94. $posX = ($ground_w - $w) / 2; 
  95. $posY = $ground_h - $h; 
  96. break; 
  97. case 9://9为底端居右 
  98. $posX = $ground_w - $w; 
  99. $posY = $ground_h - $h; 
  100. if(!$isWaterImage){ 
  101. $posY = $ground_h - $h-20; 
  102. break; 
  103. default://随机 
  104. $posX = rand(0,($ground_w - $w)); 
  105. $posY = rand(0,($ground_h - $h)); 
  106. break; 
  107. //设定图像的混色模式 
  108. imagealphablending($ground_im, true); 
  109. if($isWaterImage){//图片水印 
  110. //imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件 
  111. //生成混合图像 
  112. imagecopymerge($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h, $alpha); 
  113. }else{//文字水印 
  114. if( !empty($textColor) && (strlen($textColor)==7)){ 
  115. $R = hexdec(substr($textColor,1,2)); 
  116. $G = hexdec(substr($textColor,3,2)); 
  117. $B = hexdec(substr($textColor,5)); 
  118. }else{ 
  119. die("水印文字颜色格式不正确!"); 
  120. imagestring($ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B)); 
  121. //生成水印后的图片 
  122. @unlink($groundImage); 
  123. switch($ground_info[2])//取得背景图片的格式 
  124. case 1:imagegif($ground_im,$groundImage);break; 
  125. case 2:imagejpeg($ground_im,$groundImage);break; 
  126. case 3:imagepng($ground_im,$groundImage);break; 
  127. default:die($errorMsg); 
  128. //释放内存 
  129. if(isset($water_info)) unset($water_info); 
  130. if(isset($water_im)) imagedestroy($water_im); 
  131. unset($ground_info); 
  132. imagedestroy($ground_im); 

然后在

  1. $json = new Services_JSON(); 

行后添加:

  1.     /*水印配置开始*/ 
  2. $water_mark = 1;//1为加水印, 其它为不加 
  3. $water_pos = 9;//水印位置,10种状态【0为随机,1为顶端居左,2为顶端居中,3为顶端居右;4为中部居左,5为中部居中,6为中部居右;7为底端居左,8为底端居中,9为底端居】 
  4. $water_img = $_SERVER['DOCUMENT_ROOT'] .'/assets/img/water.gif';//水印图片,默认填写空,请将图片上传至:attachments/water/目录下,例: logo.gif 
  5. $water_alpha = 60;//水印透明度 
  6. $water_text = '';//水印字符串,默认填写空; 
  7. //$water_fontfile = $_SERVER['DOCUMENT_ROOT'] .'attachments/fonts/arial.ttf';//文字水印使用的字体; 
  8. if($water_mark == 1){ 
  9. imageWaterMark($file_path, $water_pos, $water_img, $water_alpha, $water_text, $water_fontfile); 
  10. /*水印配置结束*/ 

PS:

  1. 最好是图片和文字水印只用一种;
  2. 使用potoshop制作的水印图片,保存为8通道且格式为GIF的测试成功。

热门文章推荐

请稍候...