Kindeditor編輯器添加圖片上傳水印功能(php代碼)

KindEditor 是一套開源的在線HTML編輯器,開發人員可以用 KindEditor 把傳統的多行文本輸入框(textarea)替換爲可視化的富文本輸入框。可以無縫地與 Java、.NET、PHP、ASP 等程序集成,比較適合在 CMS、商城、論壇、博客、Wiki、電子郵件等互聯網應用上使用。
主要特點:

快速:體積小,加載速度快

開源:開放源代碼,高水平,高品質

底層:內置自定義 DOM 類庫,精確操作 DOM

擴展:基於插件的設計,所有功能都是插件,可根據需求增減功能

風格:修改編輯器風格非常容易,只需修改一個 CSS 文件

兼容:支持大部分主流瀏覽器,比如 IE、Firefox、Safari、Chrome、Opera

轉到正題,默認的編輯器上傳圖片時,是沒有水印功能的,下面詳細介紹:

第一步:修改upload_json.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
/*
  * 功能:PHP圖片水印,水印支持圖片或文字
  * 參數:
  * $groundImage 背景圖片,即需要加水印的圖片,暫只支持GIF,JPG,PNG格式;
  * $waterPos 水印位置,有10種狀態,0爲隨機位置;
  *  1爲頂端居左,2爲頂端居中,3爲頂端居右;
  *  4爲中部居左,5爲中部居中,6爲中部居右;
  *  7爲底端居左,8爲底端居中,9爲底端居右;
  * $waterImage 圖片水印,即作爲水印的圖片,暫只支持GIF,JPG,PNG格式;
  * $alpha 水印透明度,取值1-100;
  * $waterText 文字水印,即把文字作爲爲水印,支持ASCII碼,不支持中文;
  * $textFont 文字大小,值爲1、2、3、4或5,默認爲5;
  * $textColor 文字顏色,值爲十六進制顏色值,默認爲#FF0000(紅色);
  *
  * $waterImage 和 $waterText 最好不要同時使用,選其中之一即可,優先使用 $waterImage。
  * 當$waterImage有效時,參數$waterString、$stringFont、$stringColor均不生效。
  * 加水印後的圖片的文件名和 $groundImage 一樣。
*/
function imageWaterMark($groundImage, $waterPos=0, $waterImage='', $alpha=80, $waterText='', $water_fontfile, $textFont=9, $textColor='#FF0000'){
  $isWaterImage = FALSE;
  $formatMsg = '不支持該圖片格式!請使用GIF、JPG、PNG格式的圖片。';
  $fontFile = $water_fontfile;
  //讀取水印文件
  if(!empty($waterImage) && file_exists($waterImage)){
    $isWaterImage = TRUE;
    $water_info = getimagesize($waterImage);
    $water_w = $water_info[0];//取得水印圖片的寬
    $water_h = $water_info[1];//取得水印圖片的高
    switch($water_info[2]){//取得水印圖片的格式
      case 1:$water_im = imagecreatefromgif($waterImage);break;
      case 2:$water_im = imagecreatefromjpeg($waterImage);break;
      case 3:$water_im = imagecreatefrompng($waterImage);break;
      default:die($formatMsg);
    }
  }
  //讀取背景圖片
  if(!empty($groundImage) && file_exists($groundImage)){
    $ground_info = getimagesize($groundImage);
    $ground_w = $ground_info[0];//取得背景圖片的寬
    $ground_h = $ground_info[1];//取得背景圖片的高
    switch($ground_info[2]){//取得背景圖片的格式
      case 1:$ground_im = imagecreatefromgif($groundImage);break;
      case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
      case 3:$ground_im = imagecreatefrompng($groundImage);break;
      default:die($formatMsg);
    }
  }else{
    alert("水印圖片不存在!");
  }
  //水印位置
  if($isWaterImage){//圖片水印
    $w = $water_w;
    $h = $water_h;
    $label = "圖片的";
  }else{//文字水印
    $temp = imagettfbbox($textFont, 0, $fontFile, $waterText);//取得使用 TrueType 字體的文本的範圍
    $w = $temp[2] - $temp[6];
    $h = $temp[3] - $temp[7];
    unset($temp);
    $label = "文字區域";
  }
  if(($ground_w<$w) || ($ground_h<$h)){
    echo "需要加水印的圖片的長度或寬度比水印".$label."還小,無法生成水印!";
    return;
  }
  switch($waterPos){
    case 0://隨機
    $posX = rand(0,($ground_w - $w));
    $posY = rand(0,($ground_h - $h));
    break;
    case 1://1爲頂端居左
    $posX = 0;
    $posY = 0;
    break;
    case 2://2爲頂端居中
    $posX = ($ground_w - $w) / 2;
    $posY = 0;
    break;
    case 3://3爲頂端居右
    $posX = $ground_w - $w;
    $posY = 0;
    break;
    case 4://4爲中部居左
    $posX = 0;
    $posY = ($ground_h - $h) / 2;
    break;
    case 5://5爲中部居中
    $posX = ($ground_w - $w) / 2;
    $posY = ($ground_h - $h) / 2;
    break;
    case 6://6爲中部居右
    $posX = $ground_w - $w;
    $posY = ($ground_h - $h) / 2;
    break;
    case 7://7爲底端居左
    $posX = 0;
    $posY = $ground_h - $h;
    break;
    case 8://8爲底端居中
    $posX = ($ground_w - $w) / 2;
    $posY = $ground_h - $h;
    break;
    case 9://9爲底端居右
    $posX = $ground_w - $w;
    $posY = $ground_h - $h;
    if(!$isWaterImage){
    $posY = $ground_h - $h-20;
    }
    break;
    default://隨機
    $posX = rand(0,($ground_w - $w));
    $posY = rand(0,($ground_h - $h));
    break;
  }
  //設定圖像的混色模式
  imagealphablending($ground_im, true);
  if($isWaterImage){//圖片水印
    //imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷貝水印到目標文件
    //生成混合圖像
    imagecopymerge($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h, $alpha);
  } else {//文字水印
    if( !empty($textColor) && (strlen($textColor)==7)){
      $R = hexdec(substr($textColor,1,2));
      $G = hexdec(substr($textColor,3,2));
      $B = hexdec(substr($textColor,5));
    } else {
      die("水印文字顏色格式不正確!");
    }
    imagestring($ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
  }
  //生成水印後的圖片
  @unlink($groundImage);
  switch($ground_info[2]){//取得背景圖片的格式
    case 1:imagegif($ground_im,$groundImage);break;
    case 2:imagejpeg($ground_im,$groundImage,100);break;//注意這裏的100,經測試,100是圖片質量最佳的,但文件大小會增加很多,95的時候質量還不錯,大小和原來的差不多。作者採用95的值。
    case 3:imagepng($ground_im,$groundImage);break;
    default:die($errorMsg);
  }
  //釋放內存
  if(isset($water_info)) unset($water_info);
  if(isset($water_im)) imagedestroy($water_im);
  unset($ground_info);
  imagedestroy($ground_im);
}

第二步:找到$json = new Services_JSON();注意有兩個地方,不是在alert函數裏的那個,添加如下代碼:

1
2
3
4
5
6
7
8
9
10
11
/* 水印配置開始 */
 $water_mark = 1;//1爲加水印, 其它爲不加
 $water_pos = 9;//水印位置,10種狀態【0爲隨機,1爲頂端居左,2爲頂端居中,3爲頂端居右;4爲中部居左,5爲中部居中,6爲中部居右;7爲底端居左,8爲底端居中,9爲底端居】
 $water_img = $_SERVER['DOCUMENT_ROOT'].'/upfiles/water.gif';//水印圖片,默認填寫空,請將圖片上傳至網站根目錄的upfiles下,例: water.gif
 $water_alpha = 50;//水印透明度
 $water_text = '';//水印字符串,默認填寫空;
 //$water_fontfile = $_SERVER['DOCUMENT_ROOT'] .'/upfiles/fonts/arial.ttf';//文字水印使用的字體;
 if($water_mark == 1){
   imageWaterMark($file_path, $water_pos, $water_img, $water_alpha, $water_text, $water_fontfile);
 }
 /* 水印配置結束 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章