PHP圖片加浮水印功能

來源:互聯網
上載者:User
本篇文章主要介紹PHP圖片加浮水印功能,感興趣的朋友參考下,希望對大家有所協助。

執行個體代碼如下:

<?php/** * 功能:給一張圖片加上浮水印效果 *      $i 要加浮水印效果的圖片 *      $t 浮水印文字 *      $size 文字大小 *      $pos 浮水印的位置 *      $color 文字的顏色 *      $flag 是布爾值,主要用來區分是不是原圖上加浮水印 *      $type 如果$flag等於false 則新圖上加上浮水印 新檔案名稱為 原名_txt.jpg */function txt($i,$t='著作權',$size=25,$pos=5,$color='rand',$flag=true,$type='_txt'){  $img = imagecreatefromjpeg($i);  $w = imagesx($img);  $h = imagesy($img);  $font = dirname(__FILE__).'/font/ls.ttf';  $ps = imagettfbbox($size,0,$font,$t);  $tw = $ps[4];  $th = abs($ps[5]);  switch($pos){    case 1:break;      case 2:break;      case 3:break;      case 4:break;      case 5:$x=($w-$tw)/2;$y=($h-$th)/2+$th;break;      case 6:break;      case 7:break;      case 8:break;      case 9:break;      default:break;  }  $c = getcolor($img,$color);  imagettftext($img,$size,0,$x,$y,$c,$font,$t);  if($flag){    imagejpeg($img,$i);   }else{    $ext = ext($i);    $ppp = rtrim($i,'.'.$ext);    $ppp = $ppp.$type.'.'.$ext;    imagejpeg($img,$ppp);  }} function getcolor($i,$c='rand',$a=50){  $cc = '';  switch($c){    case 'white':$cc=imagecolorallocatealpha($i,255,255,255,$a);break;    case 'black':$cc=imagecolorallocatealpha($i,0,0,0,$a);break;    case 'red':$cc=imagecolorallocatealpha($i,255,0,0,$a);break;    case 'green':$cc=imagecolorallocatealpha($i,0,255,0,$a);break;    case 'blue':$cc=imagecolorallocatealpha($i,0,0,255,$a);break;    case 'orange':$cc=imagecolorallocatealpha($i,0xff,0x66,0x33,$a);break;    case 'yellow':$cc=imagecolorallocatealpha($i,255,255,0,$a);break;    case 'rand':$cc=imagecolorallocatealpha($i,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255),$a);break;    default:      $cs = substr($c,1);      $ok = str_split($cs,2);      $cc = imagecolorallocatealpha($i,hexdec($ok[0]),hexdec($ok[1]),hexdec($ok[2]),$a);    break;     }  return $cc;}  /** * 功能是:返回副檔名 */ function ext($f){  $exts = explode('.',$f);  return end($exts);} /** * 功能是:返迴文件名,不含副檔名 */function name($f){  $s = explode('/',$f);  $fn = end($s);  return rtrim($fn,'.'.ext($f));}

我們再來看一個支援以圖片和文字兩種方式給圖片添加浮水印。圖片支援GIF,PNG,JPG三種格式,浮水印圖片支援PNG和GIF

function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType){  $srcInfo = @getimagesize($imgSrc);  $srcImg_w  = $srcInfo[0];  $srcImg_h  = $srcInfo[1];      switch ($srcInfo[2])   {     case 1:       $srcim =imagecreatefromgif($imgSrc);       break;     case 2:       $srcim =imagecreatefromjpeg($imgSrc);       break;     case 3:       $srcim =imagecreatefrompng($imgSrc);       break;     default:       die("不支援的圖片檔案類型");       exit;   }      if(!strcmp($markType,"img"))  {    if(!file_exists($markImg) || empty($markImg))    {      return;    }          $markImgInfo = @getimagesize($markImg);    $markImg_w  = $markImgInfo[0];    $markImg_h  = $markImgInfo[1];          if($srcImg_w < $markImg_w || $srcImg_h < $markImg_h)    {      return;    }          switch ($markImgInfo[2])     {       case 1:         $markim =imagecreatefromgif($markImg);         break;       case 2:         $markim =imagecreatefromjpeg($markImg);         break;       case 3:         $markim =imagecreatefrompng($markImg);         break;       default:         die("不支援的浮水印圖片檔案類型");         exit;     }          $logow = $markImg_w;    $logoh = $markImg_h;  }      if(!strcmp($markType,"text"))  {    $fontSize = 16;    if(!empty($markText))    {      if(!file_exists($fontType))      {        return;      }    }    else {      return;    }          $box = @imagettfbbox($fontSize, 0, $fontType,$markText);    $logow = max($box[2], $box[4]) - min($box[0], $box[6]);    $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);  }      if($markPos == 0)  {    $markPos = rand(1, 9);  }      switch($markPos)  {    case 1:      $x = +5;      $y = +5;      break;    case 2:      $x = ($srcImg_w - $logow) / 2;      $y = +5;      break;    case 3:      $x = $srcImg_w - $logow - 5;      $y = +15;      break;    case 4:      $x = +5;      $y = ($srcImg_h - $logoh) / 2;      break;    case 5:      $x = ($srcImg_w - $logow) / 2;      $y = ($srcImg_h - $logoh) / 2;      break;    case 6:      $x = $srcImg_w - $logow - 5;      $y = ($srcImg_h - $logoh) / 2;      break;    case 7:      $x = +5;      $y = $srcImg_h - $logoh - 5;      break;    case 8:      $x = ($srcImg_w - $logow) / 2;      $y = $srcImg_h - $logoh - 5;      break;    case 9:      $x = $srcImg_w - $logow - 5;      $y = $srcImg_h - $logoh -5;      break;    default:       die("此位置不支援");       exit;  }      $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);      imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);      if(!strcmp($markType,"img"))  {    imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);    imagedestroy($markim);  }      if(!strcmp($markType,"text"))  {    $rgb = explode(',', $TextColor);          $color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);    imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);  }      switch ($srcInfo[2])   {     case 1:      imagegif($dst_img, $imgSrc);       break;     case 2:       imagejpeg($dst_img, $imgSrc);       break;     case 3:       imagepng($dst_img, $imgSrc);       break;    default:       die("不支援的浮水印圖片檔案類型");       exit;   }      imagedestroy($dst_img);  imagedestroy($srcim);}

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

相關推薦:

PHP正則中的擷取的群組與非擷取的群組執行個體分析

PHP怎樣產生映像驗證碼的方法

關於PHP中spl_autoload_register()函數用法詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.