PHP加浮水印代碼 支援文字和圖片浮水印_PHP教程

來源:互聯網
上載者:User
  PHP加圖片浮水印、文字浮水印類代碼,PHP加浮水印類,支援文字圖片浮水印的透明度設定、浮水印圖片背景透明。自己寫的一個類,因為自己開發的一套CMS中要用到,網上的總感覺用著不順手,希望大家也喜歡這個類,後附有類使用方法。

  001

  002class WaterMask{

  003 public $waterType = 1; //浮水印類型:0為文字浮水印、1為圖片浮水印

  004 public $pos = 0; //浮水印位置

  005 public $transparent = 45; //浮水印透明度

  006 public $waterStr = 'www.codefans.net'; //浮水印文字

  007 public $fontSize = 16; //文字字型大小

  008 public $fontColor = array(255,0,255); //浮水印文字顏色(RGB)

  009 public $fontFile = 'AHGBold.ttf';//字型檔

  010 public $waterImg = 'logo.png';//浮水印圖片

  011 private $srcImg = '';//需要添加浮水印的圖片

  012 private $im = '';//圖片控制代碼

  013 private $water_im = '';//浮水印圖片控制代碼

  014 private $srcImg_info = '';//圖片資訊

  015 private $waterImg_info = '';//浮水印圖片資訊

  016 private $str_w = '';//浮水印文字寬度

  017 private $str_h = '';//浮水印文字高度

  018 private $x = '';//浮水印X座標

  019 private $y = '';//浮水印y座標

  020 function __construct($img) {

  021 $this->srcImg = file_exists($img) $img : die('"'.$img.'" 對不起,浮水印檔案不存在!');

  022 }

  023 private function imginfo() {//擷取浮水印圖片資訊,並載入。

  024 $this->srcImg_info = getimagesize($this->srcImg);

  025 switch ($this->srcImg_info[2]) {

  026 case 3:

  027 $this->im = imagecreatefrompng($this->srcImg);

  028 break 1;

  029 case 2:

  030 $this->im = imagecreatefromjpeg($this->srcImg);

  031 break 1;

  032 case 1:

  033 $this->im = imagecreatefromgif($this->srcImg);

  034 break 1;

  035 default:

  036 die('浮水印圖片('.$this->srcImg.')浮水印圖片格式不對,請選擇PNG、JPEG、GIF格式的圖片。');

  037 }

  038 }

  039 private function waterimginfo() {//擷取浮水印圖片並載入。

  040 $this->waterImg_info = getimagesize($this->waterImg);

  041 switch ($this->waterImg_info[2]) {

  042 case 3:

  043 $this->water_im = imagecreatefrompng($this->waterImg);

  044 break 1;

  045 case 2:

  046 $this->water_im = imagecreatefromjpeg($this->waterImg);

  047 break 1;

  048 case 1:

  049 $this->water_im = imagecreatefromgif($this->waterImg);

  050 break 1;

  051 default:

  052 die('浮水印圖片('.$this->srcImg.')格式不對,只支援PNG、JPEG、GIF。');

  053 }

  054 }

  055 private function waterpos() {//浮水印位置演算法

  056 switch ($this->pos) {

  057 case 0: //隨機位置

  058 $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);

  059 $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);

  060 break 1;

  061 case 1: //上左

  062 $this->x = 0;

  063 $this->y = 0;

  064 break 1;

  065 case 2: //上中

  066 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

  067 $this->y = 0;

  068 break 1;

  069 case 3: //上右

  070 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];

  071 $this->y = 0;

  072 break 1;

  073 case 4: //中左

  074 $this->x = 0;

  075 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

  076 break 1;

  077 case 5: //中中

  078 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

  079 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

  080 break 1;

  081 case 6: //中右

  082 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];

  083 $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

  084 break 1;

  085 case 7: //下左

  086 $this->x = 0;

  087 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];

  088 break 1;

  089 case 8: //下中

  090 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

  091 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];

  092 break 1;

  093 default: //下右

  094 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0];

  095 $this->y = $this->srcImg_info[1]-$this->waterImg_info[1];

  096 break 1;

  097 }

  098 }

  099 private function waterimg() {

  100 if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){

  101 die('浮水印比原圖大!');

  102 }

  103 $this->waterpos();

  104 $cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);

  105 imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);

  106 $pct = $this->transparent;

  107 imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);

  108 imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);

  109 }

  110 private function waterstr() {

  111 $rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);

  112 $w = abs($rect[2]-$rect[6]);

  113 $h = abs($rect[3]-$rect[7]);

  114 $fontHeight = $this->fontSize;

  115 $this->water_im = imagecreatetruecolor($w, $h);

  116 imagealphablending($this->water_im,false);

  117 imagesavealpha($this->water_im,true);

  118 $white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127);

  119 imagefill($this->water_im,0,0,$white_alpha);

  120 $color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);

  121 imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);

  122 $this->waterImg_info = array(0=>$w,1=>$h);

  123 $this->waterimg();

  124 }

  125 function output() {

  126 $this->imginfo();

  127 if ($this->waterType == 0) {

  128 $this->waterstr();

  129 }else {

  130 $this->waterimginfo();

  131 $this->waterimg();

  132 }

  133 switch ($this->srcImg_info[2]) {

  134 case 3:

  135 imagepng($this->im,$this->srcImg);

  136 break 1;

  137 case 2:

  138 imagejpeg($this->im,$this->srcImg);

  139 break 1;

  140 case 1:

  141 imagegif($this->im,$this->srcImg);

  142 break 1;

  143 default:

  144 die('原因未知:浮水印添加失敗!');

  145 break;

  146 }

  147 imagedestroy($this->im);

  148 imagedestroy($this->water_im);

  149 }

  150}

  151?>

  PHP產生浮水印類用法:

  view sourceprint?01

  02$obj = new WaterMask($imgFileName);

  03$obj->$waterType = 1;//浮水印類型:0為文字浮水印、1為圖片浮水印

  04$obj->$transparent = 45;//浮水印透明度

  05$obj->$waterStr = 'www.codefans.net';//浮水印文字

  06$obj->$fontSize = 16;//字型大小

  07$obj->$fontColor = array(255,0,255);//浮水印文字顏色(RGB值)

  08$obj->$fontFile = = 'AHGBold.ttf'; //字型名稱

  09$obj->output(); //輸出浮水印圖片

  10?>

http://www.bkjia.com/PHPjc/755612.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/755612.htmlTechArticlePHP加圖片浮水印、文字浮水印類代碼,PHP加浮水印類,支援文字圖片浮水印的透明度設定、浮水印圖片背景透明。自己寫的一個類,因為自己開發的一...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.