一個超級強大的圖片加浮水印的類_PHP教程

來源:互聯網
上載者:User
下午沒事幹,就寫了個圖片加浮水印處理的類,本類實現了給圖片加文字浮水印,加圖片浮水印,並且實現了透明度的功能,以供各位網友學習和交流

/**

* 加浮水印類,支援文字、圖片浮水印以及對透明度的設定、浮水印圖片背景透明。

* @author litx date:2011-12-05下午3點於邁科龍快播研發中心

*/

class WaterMask

{

/**

* 浮水印類型

* @var int $waterType 0為文字浮水印 ;1為圖片浮水印

*/

private $waterType = 1;

/**

* 浮水印位置 類型

* @var int $pos 預設為9(右下角)

*/

private $pos = 9;

/**

* 浮水印透明度

* @var int $transparent 浮水印透明度(值越小越透明)

*/

private $transparent = 20;

/**

* 如果是文字浮水印,則需要加的浮水印文字

* @var string $waterStr 預設值 (李鐵雄個人作品集)

*/

private $waterStr = '個人作品集';

/**

* 文字字型大小

* @var int $fontSize 字型大小

*/

private $fontSize = 14;

/**

* 浮水印文字顏色(RGB)

* @var array $fontColor 浮水印文字顏色(RGB)

*/

private $fontColor = array ( 255, 255, 255 );

/**

* 字型檔

* @var unknown_type

*/

private $fontFile = 'AHGBold.ttf';

/**

* 浮水印圖片

* @var string $waterImg

*/

private $waterImg = 'logo.png';

/**

* 需要添加浮水印的圖片

* @var string $srcImg

*/

private $srcImg = '';

/**

* 圖片控制代碼

* @var string $im

*/

private $im = '';

/**

* 浮水印圖片控制代碼

* @var string $water_im

*/

private $water_im = '';

/**

* 圖片資訊

* @var array $srcImg_info

*/

private $srcImg_info = '';

/**

* 浮水印圖片資訊

* @var array $waterImg_info

*/

private $waterImg_info = '';

/**

* 浮水印文字寬度

* @var int $str_w

*/

private $str_w = '';

/**

* 浮水印文字高度

* @var int $str_h

*/

private $str_h = '';

/**

* 浮水印X座標

* @var int $x

*/

private $x = '';

/**

* 浮水印y座標

* @var int $y

*/

private $y = '';

/**

* 建構函式,通過傳入需要加浮水印的源圖片初始化源圖片

* @param string $img 需要加浮水印的源圖片

*/

public function __construct ($img)

{

if(file_exists($img)){//源檔案存在

$this -> srcImg = $img ;

}else{//源檔案不存在

echo '源檔案'.$img.'不存在,請檢查看檔案路徑是否正確';

exit();

}

}

/**

* 擷取需要添加浮水印的圖片的資訊,並載入圖片

*/

public function imginfo ()

{

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

var_dump($this -> srcImg_info);exit();

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

case 3 ://png

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

break 1;

case 2 : // jpeg/jpg

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

break 1;

case 1 : //gif

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

break 1;

default :

echo '源圖片檔案'. $this -> srcImg .'格式不正確,目前本函數只支援PNG、JPEG、GIF圖片浮水印功能';

exit();

}

}

/**

* 擷取浮水印圖片的資訊,並載入圖片

*/

private function waterimginfo ()

{

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

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

case 3 :

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

break 1;

case 2 :

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

break 1;

case 1 :

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

break 1;

default :

echo '源圖片檔案'. $this -> srcImg .'格式不正確,目前本函數只支援PNG、JPEG、GIF圖片浮水印功能';

exit();

}

}

/**

* 浮水印位置演算法

*/

private function waterpos ()

{

switch ($this -> pos) {

case 0 : //隨機位置

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

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

break 1;

case 1 : //上左

$this -> x = 20;

$this -> y = 20;

break 1;

case 2 : //上中

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

$this -> y = 20;

break 1;

case 3 : //上右

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

$this -> y = 20;

break 1;

case 4 : //中左

$this -> x = 20;

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

break 1;

case 5 : //中中

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

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

break 1;

case 6 : //中右

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

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

break 1;

case 7 : //下左

$this -> x = 20;

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

break 1;

case 8 : //下中 www.2cto.com

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

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

break 1;

case 9 : //下右

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

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

break 1;

default : //下右

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

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

break 1;

}

}

/**

* 加圖片浮水印

*/

private function waterimg ()

{

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

echo '圖片尺寸太小,無法加浮水印,請上傳一張大圖片';

exit();

}

//計算浮水印位置

$this->waterpos();

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

imagecopy($cut, $this -> im, 0, 0, $this -> x, $this -> y, $this -> waterImg_info[0],

$this -> waterImg_info[1]);

$pct = $this -> transparent;

imagecopy($cut, $this -> water_im, 0, 0, 0, 0, $this -> waterImg_info[0],

$this -> waterImg_info[1]);

//將圖片與浮水印圖片合成

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

}

/**

* 加文字浮水印

*/

private function waterstr ()

{

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

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

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

$fontHeight = $this -> fontSize;

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

imagealphablending($this -> water_im, false);

imagesavealpha($this -> water_im, true);

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

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

$color = imagecolorallocate($this -> water_im, $this -> fontColor[0], $this -> fontColor[1],

$this -> fontColor[2]);

imagettftext($this -> water_im, $this -> fontSize, 0, 0, $this -> fontSize, $color,

$this -> fontFile, $this -> waterStr);

$this -> waterImg_info = array (

0 => $w, 1 => $h

);

$this->waterimg();

}

/**

* 浮水印圖片輸出

*/

public function output ()

{

$this->imginfo();

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

$this->waterstr();

} else {

$this->waterimginfo();

$this->waterimg();

}

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

case 3 :

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

break 1;

case 2 :

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

break 1;

case 1 :

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

break 1;

default :

die('添加浮水印失敗!');

break;

}

//圖片合成後的後續銷毀處理

imagedestroy($this -> im);

imagedestroy($this -> water_im);

}

}

使用方法樣本:

//執行個體化對象

$obj = new WaterMask('img/10451.jpg');

//類型:0為文字浮水印、1為圖片浮水印

$obj->waterType = 0;

//浮水印透明度,值 越小透明度越高

$obj->transparent = 15;

//浮水印文字

//$obj->waterStr = '生日快樂';

//浮水印圖片

//$obj->waterImg = '';//浮水印圖片

//文字字型大小

$obj->fontSize = 14;

//浮水印文字顏色(RGB)

$obj->fontColor = array(255,255,100);

//字型檔

$obj->fontFile = 'STCAIYUN.ttf';

//輸出浮水印圖片檔案覆蓋到輸入的圖片檔案

$obj->output();

使用方式比較簡單,也很實用。

作者 ltx851201

http://www.bkjia.com/PHPjc/478502.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478502.htmlTechArticle下午沒事幹,就寫了個圖片加浮水印處理的類,本類實現了給圖片加文字浮水印,加圖片浮水印,並且實現了透明度的功能,以供各位網友學習和...

  • 聯繫我們

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