首先現(xiàn)打開一張圖片。
<?php
header('content-type:image/jpeg;charset="utf-8"'); //告訴瀏覽器這是一張圖片,不是html代碼票腰,不然會亂碼
$imgSrc = './image1.jpg'; //圖片存放路徑
$img = imagecreatefromjpeg($imgSrc);//打開圖片
imagejpeg($img); //解析圖片
?>
增加文字水印城看。
<?php
header('content-type:image/jpeg;charset="utf-8"'); //告訴瀏覽器這是一張圖片,不是html代碼,不然會亂碼
$imgSrc = './image1.jpg'; //圖片存放路徑
$img = imagecreatefromjpeg($imgSrc);//打開圖片
$color = imagecolorallocate($img,0,0,0); //文字水印顏色分配杏慰,后三個參數(shù)為rgb,000為黑色
$text = '今天天氣不錯测柠!'; //文本水印內(nèi)容
imagettftext($img,40,0,200,200,$color,'STXINGKA.TTF',$text); //繪制圖片水印
//參數(shù)解釋炼鞠,分別是:圖片資源、字體大小轰胁、字體傾斜角度谒主、文字在x軸位置、文字在y軸的位置赃阀、文本顏色霎肯、字體家族路徑、文本內(nèi)容
imagejpeg($img); //解析圖片
?>
注意:
字體家族獲劝及摇:
win10電腦--我的電腦--C盤--windows--Font--選擇1種你喜歡的字體拷貝到項目中姿现。
他是一種.ttf后綴的文件,你也可以到百度搜索一些你喜歡的字體下載解壓即可使用肖抱。
如果你的水印是中文的話备典,那么你的字體家族也要找中文的字體,不能使用英文的字體家族意述,不然頁面不會顯示效果提佣,但是英文文本可以使用中文的字體家族。
獲取圖片的寬高信息
<?php
$imgSrc = './image1.jpg'; //圖片存放路徑
$img = imagecreatefromjpeg($imgSrc);//打開圖片
echo "圖片的寬度是:";
var_dump(imagesx($img)); //獲取圖片的寬度
echo "圖片的高度是:";
var_dump(imagesy($img)); //獲取圖片的高度
var_dump(getimagesize('./image1.jpg')); /*獲取圖片的詳情信息,寬高荤崇、字節(jié)大小拌屏、
圖片格式、命名术荤、文件路徑等倚喂,不過參數(shù)不能放變量的圖片路徑。*/
//print_r(getimagesize('./image1.jpg')); //print_r和var_dump輸出同樣效果
?>
我們看看圖片是不是真的是1152X864
獲取文本水印盒子的寬高
首先我們要知道文本水印的內(nèi)容是實際上是有一個盒子包裹的瓣戚,是有寬高的端圈。
<?php
$imgSrc = './image1.jpg'; //圖片存放路徑
$img = imagecreatefromjpeg($imgSrc);//打開圖片
$text = 'qianying.com'; //文本水印內(nèi)容
imagettftext($img,40,0,100,100,$color,'STXINGKA.TTF',$text); //繪制圖片水印
$posi = imagettfbbox(40,0,'STXINGKA.TTF',$text); //獲取文本盒子的寬高信息
var_dump($posi);
imagedestroy($img); //釋放資源
?>
每個數(shù)組下標(biāo)對應(yīng)的x和y軸坐標(biāo)(這個非常重要)。
控制文本水印盒子放置位置
如果我們想把文本水印放在圖片的右下角子库,我們第一個想法就是去直接手動調(diào)參數(shù)舱权。
我們已知圖片寬為1152px,高為864px仑嗅。那么我們可以大概判斷宴倍,水印文本的放置位置在x軸上的800px左右,高也是800左右仓技,忽略字體大小40px一個字符不計鸵贬。剛好可以到右下角這個位置。
但這種是寫死的固定定位脖捻,我們換一下水印文本內(nèi)容就會看出問題所在恭理。
水印文字沒有完整輸出到圖片上?這時候我們還是手動去調(diào)郭变?那換一張圖片颜价、換字體大小涯保、更改水印內(nèi)容文本、水印文本盒子的寬高等都會受到影響周伦,導(dǎo)致水印文本輸出不完整夕春,這種調(diào)X和Y軸的參數(shù),顯然不太合適了专挪。
正確做法是:先獲取圖片的高和寬及志,再獲取水印文本盒子的寬高,再來做出水印盒子相對于圖片X軸和Y軸的位移判斷寨腔。
完整代碼:
<?php
header('content-type:image/jpeg;charset="utf-8"'); //告訴瀏覽器這是一張圖片,不是html代碼速侈,不然會亂碼
$imgSrc = './image1.jpg'; //圖片存放路徑
$img = imagecreatefromjpeg($imgSrc);//打開圖片
$color = imagecolorallocate($img,0,0,0); //文字水印顏色分配,后三個參數(shù)為rgb,000為黑色
$text = '千影圖庫'; //文本水印內(nèi)容
$posiBox_text = imagettfbbox(40,0,'STXINGKA.TTF',$text); //獲取水印盒子的寬高信息
$textBox_width = $posiBox_text[2] - $posiBox_text[0];
//求出盒子的寬度迫卢,X軸:右下角的x坐標(biāo)-左下角的x坐標(biāo) = 寬度
$img_width = imagesx($img); //獲取圖片的寬度
$img_height = imagesy($img); //獲取圖片的高度
imagettftext($img,40,0,$img_width-1-$textBox_width-($img_width/30),$img_height-1-($img_width/30),$color,'STXINGKA.TTF',$text); //繪制圖片的文字水印
//參數(shù)解釋倚搬,分別是:圖片資源、字體大小乾蛤、字體傾斜角度每界、文字在x軸位置、文字在y軸的位置家卖、文本顏色眨层、字體家族路徑、文本內(nèi)容
imagejpeg($img); //解析圖片
?>
效果預(yù)覽:
水印盒子的寬度是怎么求的上荡?
圖片水印處理
首先找一張帶文字logo的圖片趴樱,作為我們的圖像水印拷貝。
比如我們用這張圖片作為我們的圖像水印拷貝酪捡。
實際效果預(yù)覽:
代碼:
<?php
header('content-type:image/jpeg;charset="utf-8"'); //告訴瀏覽器這是一張圖片,不是html代碼伊佃,不然會亂碼
$imgSrc = './image1.jpg'; //圖片存放路徑
$waterImgSrc = './logo.png'; //水印圖片存放路徑
$img = imagecreatefromjpeg($imgSrc);//打開目標(biāo)圖片
$waterImg = imagecreatefrompng($waterImgSrc);//打開水印圖片
$color = imagecolorallocate($img,0,0,0); //文字水印顏色分配,后三個參數(shù)為rgb,000為黑色
$text = '千影圖庫'; //文本水印內(nèi)容
$posiBox_text = imagettfbbox(40,0,'STXINGKA.TTF',$text); //獲取水印盒子的寬高信息
$textBox_width = $posiBox_text[2] - $posiBox_text[0]; //求出盒子的寬度沛善,X軸:右下角的x坐標(biāo)-左下角的x坐標(biāo) = 寬度
$img_width = imagesx($img); //獲取目標(biāo)圖片的寬度
$img_height = imagesy($img); //獲取目標(biāo)圖片的高度
$waterMarkWidth = imagesx($waterImg); //獲取水印圖片的寬度
$waterMarkHeight = imagesy($waterImg); //獲取水印圖片的高度
imagettftext($img,40,0,$img_width-1-$textBox_width-($img_width/30),$img_height-1-($img_width/30),$color,'STXINGKA.TTF',$text); //繪制圖片的文字水印
//參數(shù)解釋,分別是:圖片資源塞祈、字體大小金刁、字體傾斜角度、文字在x軸位置议薪、文字在y軸的位置尤蛮、文本顏色、字體家族路徑斯议、文本內(nèi)容
imagecopy($img,$waterImg,100,100,0,0,$waterMarkWidth,$waterMarkHeight);
imagejpeg($img); //解析圖片
imagedestroy($img); //釋放資源
?>
imagecopy()方法:水印圖片拷貝的參數(shù)說明: