php水印

 <?windows

 /* 
 * 功能:PHP圖片水印 (水印支持圖片或文字) 
 * 參數: 
 *       $groundImage     背景圖片,即須要加水印的圖片,暫只支持GIF,JPG,PNG格式; 
 *       $waterPos        水印位置,有10種狀態,0爲隨機位置; 
 *                       1爲頂端居左,2爲頂端居中,3爲頂端居右; 
 *                       4爲中部居左,5爲中部居中,6爲中部居右; 
 *                       7爲底端居左,8爲底端居中,9爲底端居右; 
 *       $waterImage      圖片水印,即做爲水印的圖片,暫只支持GIF,JPG,PNG格式; 
 *       $waterText       文字水印,即把文字做爲爲水印,支持ASCII碼,不支持中文; 
 *       $fontSize        文字大小,值爲一、二、三、4或5,默認爲5; 
 *       $textColor       文字顏色,值爲十六進制顏色值,默認爲#CCCCCC(白灰色); 
 *       $fontfile        ttf字體文件,即用來設置文字水印的字體。使用windows的用戶在系統盤的目錄中
 *                       搜索*.ttf能夠獲得系統中安裝的字體文件,將所要的文件拷到網站合適的目錄中,
 *                       默認是當前目錄下arial.ttf。
 *       $xOffset         水平偏移量,即在默認水印座標值基礎上加上這個值,默認爲0,若是你想留給水印留
 *                       出水平方向上的邊距,能夠設置這個值,如:2 則表示在默認的基礎上向右移2個單位,-2 表示向左移兩單位
 *       $yOffset         垂直偏移量,即在默認水印座標值基礎上加上這個值,默認爲0,若是你想留給水印留
 *                       出垂直方向上的邊距,能夠設置這個值,如:2 則表示在默認的基礎上向下移2個單位,-2 表示向上移兩單位
 * 返回值:
 *        0   水印成功
 *        1   水印圖片格式目前不支持
 *        2   要水印的背景圖片不存在
 *        3   須要加水印的圖片的長度或寬度比水印圖片或文字區域還小,沒法生成水印
 *        4   字體文件不存在
 *        5   水印文字顏色格式不正確
 *        6   水印背景圖片格式目前不支持
 * 修改記錄:
 *         
 * 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG 
 *       $waterImage 和 $waterText 最好不要同時使用,選其中之一便可,優先使用 $waterImage。 
 *       當$waterImage有效時,參數$waterString、$stringFont、$stringColor均不生效。 
 *       加水印後的圖片的文件名和 $groundImage 同樣。 
 * 做者:高西林
 * 日期:2007-4-28
 * 說明:本程序根據longware的程序改寫而成。 
 */ 
 function p_w_picpathWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$fontSize=0,$textColor="#CCCCCC", $fontfile='',$xOffset=0,$yOffset=0) 
 { 
  if(!$fontfile) $fontfile=dirname(__FILE__).'/huawenkaiti.ttf';
    $isWaterImage = FALSE; 
      //讀取水印文件 
      if(!empty($waterImage) && file_exists($waterImage)) { 
          $isWaterImage = TRUE; 
          $water_info = getp_w_picpathsize($waterImage); 
          $water_w     = $water_info[0];//取得水印圖片的寬 
          $water_h     = $water_info[1];//取得水印圖片的高 
 
          switch($water_info[2])   {    //取得水印圖片的格式  
              case 1:$water_im = p_w_picpathcreatefromgif($waterImage);break; 
              case 2:$water_im = p_w_picpathcreatefromjpeg($waterImage);break; 
              case 3:$water_im = p_w_picpathcreatefrompng($waterImage);break; 
              default:return 1; 
          } 
      } 
 
      //讀取背景圖片 
      if(!empty($groundImage) && file_exists($groundImage)) { 
          $ground_info = getp_w_picpathsize($groundImage); 
          $ground_w     = $ground_info[0];//取得背景圖片的寬 
          $ground_h     = $ground_info[1];//取得背景圖片的高 
 
          switch($ground_info[2]) {    //取得背景圖片的格式  
              case 1:$ground_im = p_w_picpathcreatefromgif($groundImage);break; 
              case 2:$ground_im = p_w_picpathcreatefromjpeg($groundImage);break; 
              case 3:$ground_im = p_w_picpathcreatefrompng($groundImage);break; 
              default:return 1; 
          } 
      } else { 
          return 2; 
      } 
 
      //水印位置 
      if($isWaterImage) { //圖片水印  
          $w = $water_w; 
          $h = $water_h; 
          $label = "圖片的";
          } else {  
      //文字水印 
         if(!file_exists($fontfile))return 4;
          if(!empty($waterText)) $waterText=iconv('GBK','UTF-8',$waterText);
          if(! $fontSize){
          if($ground_h<200 || $ground_w<200){
          $fontSize=10;
          }
          elseif((200<$ground_h && $ground_h<500) || (200<$ground_w && $ground_w<500)){
          $fontSize=20;
          }elseif((500<$ground_h && $ground_h<1000) || (500<$ground_w && $ground_w<1000)){
          $fontSize=80;
          }
          else $fontSize=100;
          }
          
          $temp = p_w_picpathttfbbox($fontSize,0,$fontfile,$waterText);//取得使用 TrueType 字體的文本的範圍 
          $w = $temp[2] - $temp[6]; 
          $h = $temp[3] - $temp[7]; 
          unset($temp); 
      } 
    
      if( ($ground_w < $w) || ($ground_h < $h) ) { 
          return 3; 
      } 
      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; 
              break; 
          default://隨機 
              $posX = rand(0,($ground_w - $w)); 
              $posY = rand(0,($ground_h - $h)); 
              break;     
      } 
 
      //設定圖像的混色模式 
      p_w_picpathalphablending($ground_im, true); 
 
      if($isWaterImage) { //圖片水印 
          p_w_picpathcopy($ground_im, $water_im, $posX + $xOffset, $posY + $yOffset, 0, 0, $water_w,$water_h);//拷貝水印到目標文件         
      } 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 { 
            return 5;
          } 
          p_w_picpathttftext ( $ground_im, $fontSize, 0, $posX + $xOffset, $posY + $h + $yOffset, p_w_picpathcolorallocate($ground_im, $R, $G, $B), $fontfile, $waterText);
      } 
 
      //生成水印後的圖片 
      @unlink($groundImage); 
      switch($ground_info[2]) {//取得背景圖片的格式 
          case 1:p_w_picpathgif($ground_im,$groundImage);break; 
          case 2:p_w_picpathjpeg($ground_im,$groundImage);break; 
          case 3:p_w_picpathpng($ground_im,$groundImage);break; 
          default: return 6; 
      } 
 
      //釋放內存 
      if(isset($water_info)) unset($water_info); 
      if(isset($water_im)) p_w_picpathdestroy($water_im); 
      unset($ground_info); 
      p_w_picpathdestroy($ground_im); 
      //
      return 0;
 }
 ?>
相關文章
相關標籤/搜索