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

[PHP]Kindeditor4.1上传图片时添加水印的功能实现

时间:2014-09-10 21:50酷播
[PHP]主要修改upload_json.php文件,首先在upload_json.php文件中添加水印函数Kindeditor4.1上传图片时添加水印的功能实现

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

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器