首頁 >後端開發 >php教程 >php圖片加中文浮水印實現代碼分享

php圖片加中文浮水印實現代碼分享

高洛峰
高洛峰原創
2016-12-01 11:53:271132瀏覽

例1 
複製程式碼 程式碼如下: 
Header("Content-type: image/png"); /*通知瀏覽器,要輸出圖片*/ 
$im = imagecreate(400 , 300); *定義影像的大小*/ 
$gray = ImageColorAllocate($im , 235 , 235 , 235); 
$pink = ImageColorAllocate($im, 255 , 128 , 255); /* $fontfile 字體的路徑,視操作系統而定,可以是simhei.ttf(黑體) , SIMKAI.TTF(楷體) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋體&新宋體) 等人支持的中文字體*/ 
$str = iconv('GB2312','UTF-8','中文水印'); /*將gb2312 的字元集轉換成UTF-8 的字元*/ 
ImageTTFText($im, 30, 0, 100, 200, $pink , $fontfile , $str); 
/* 加入中文水印*/ 
Imagepng($im); 
ImageDestroy($im); 
?> 
ImageDestroy($im); 
?> 
ImageDestroy($im); 
?> 
ImageDestroy($im); 
?> 

// **************************************** //
// 功能: 新增文字 
// 參數: $img 圖片檔案名稱 
// $new_img 儲存圖片檔案名稱,如果為空白表示不另存圖片 
// $text 字串內容 
// text_size 字串大小 
// text_angle 字型字串輸出角度 
// text_x 字串輸出x 座標 
// text_y 字串輸出y 座標 
// $text_font 字型檔名顏色RGB值 
// **************************************** // 
function img_text($img, $new_img, $text, $text_size, $text_angle, $text_x, $text_y, $text_font, $r, $g, $b){ 
$text=iconv("gb2312","UTF-8 ",$text); 
Header("Content-type: image/gif"); 
$im = @imagecreatefromstring(file_get_contents($img)) 或 die ("開啟圖片失敗!"); 
$color = ImageColorAllocate( $im, $r,$g,$b); 
//ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text): 
//本函數將TTF (TrueType Fonts) 字體文字寫入圖片。
//參數: size 為字形的尺寸; 
// angle 為字型的角度,順時針計算,0 度為水平(由左到右),90 度則為由下到上的文字; 
// x,y 二參數為文字的座標值(原點為左上角); 
// col 為字的顏色; 
// fontfile 為字體檔案名稱; 
// text 是字串內容。
ImageTTFText($im, $text_size, $text_angle, $text_x, $text_y, $color, $text_font, $text); 
if ($new_img==""): 
ImageGif($im); // 不保存圖片,只顯示 
else: 
ImageGif($im,$new_img); // 儲存圖片,但不顯示 
endif; 
ImageDestroy($im); //結束圖形,釋放記憶體空間?範例3 
複製程式碼 程式碼如下: 
/* 
* 功能:PHP圖片水印(浮水印支援圖片或文字) 
*參數: 
* $groundImage 背景圖片,即需暫加加註的圖片,需暫加支援GIF,JPG,PNG格式; 
* $waterPos 水印位置,有10種狀態,0為隨機位置; 
* 1為頂端居左,2為頂端居中,3為頂端居右; 
* 4為中部居左,5為中部居中,6為中部居右; 
* 7為底端居左,8為底端居中,9為底端居右; 
* $waterImage 圖片水印,即作為水印的圖片,暫只支持GIF,JPG ,PNG格式; 
* $waterText 文字浮水印,即把文字當作水印,支援ASCII碼,不支援中文; 
* $textFont 文字大小,值為1、2、3、4或5,預設為5; 
* $textColor 文字顏色,值為十六進位顏色值,預設為#FF0000(紅色); 

* 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG 
* $ $waterText 最好不要同時使用,選其中一個即可,優先使用$waterImage。 
* 當$waterImage有效時,參數$waterString、$stringFont、$stringColor皆不生效。 
* 加浮水印後的圖片的檔案名稱和 $groundImage 一樣。
* 作者:longware @ 2004-11-3 14:15:13 
*/ 
function imageWaterMark($groundImage,$waterPos=0,$waterImage=”",$waterText=”",$textor=5,$text =”#FF0000″) 

$isWaterImage = FALSE; 
$formatMsg = 「暫不支援此檔案格式,請用圖片處理軟體將圖片轉換為GIF、JPG、PNG格式。」;文件 
if(!emptyempty($waterImage) && file_exists($waterImage)) 

$isWaterImage = TRUE; 
$water_info = getimaupize($waterImage);的寬 
$water_h = $water_info[1];//取得浮水印圖片的高 
switch($water_info[2])//取得浮水印圖片的格式 

case 1:$water_im = imagecreatefromgif($waterImage);break; 
case 2:$water_im = imagecreatefagebreak; :$water_im = imagecreatefrompng($waterImage);break; 
default:die($formatMsg); 


//讀取背景圖片 if(!emptyempty($groundmage) &$groundsed
$ground_info = getimagesize($groundImage); 
$ground_w = $ground_info[0];//取得背景圖片的寬 
$ground_h = $ground_info[1];//取得背景圖片的高 
$ground_h = $ground_info[1];//取得背景圖片的高 
itch($ground_info 2])//取得背景圖片的格式 

case 1:$ground_im = imagecreatefromgif($groundImage);break; 
case 2:$ground_im = imagecreatefromjpeg($groundImage);break 3:$ground_im = imagecreatefromjpeg($groundImage);break create ($groundImage);break; 
default:die($formatMsg); 


else 

die(」需要加水印的圖片/$ isWaterImage)//圖片浮水印 

$w = $water_w; 
$h = $water_h; 
$label = “圖片的”; 

/temp/文字水印($cumobox $ textFont*5),0,”./cour.ttf”,$waterText);//取得使用TrueType 字型的文字的範圍 
$w = $temp[2] - $temp[6]; 
$h = $ temp[3] - $temp[7]; 
unset($temp); 
$label = 「文字區域」; 

if( ($ground_w { 
echo 「需要加浮水印的圖片的長度或寬度比浮水印」.$label.」還小,無法產生浮水印! 」; 
return; 

switch($waterPos) 

case 0://隨機 
$posX = rand(0,($ground_w - $w)); 
$posX = rand(0,($ground_w - $w)); 
$posX = rand(0,($ground_w - $w)); 
$pos = - $h)); 
break; 
case 1://1為頂端居左 
$posX = 0; 
$posY = 0; 
break; 
case 2://2為頂端居中 
break; 
case 2://2為頂端居中¡ ground_w - $w) / 2; 
$posY = 0; 
break; 
case 3://3為頂端居右邊 
$posX = $ground_w - $w; 
$posY = 0  breakh; ://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 $h) / 2; 
break; 
case 7://7為底端居左 
$posX = 0; 
$posY = $ground_h - $h; 
break; 
case 8://8為底端居中; 
break; 
case 8://8為底端居中。
$posX = ($ground_w - $w) / 2; 
$posY = $ground_h - $h; 
break; 
case 9://9為底端居右邊 
$posX = $ground_w - $ww; $posY = $ground_h - $h; 
break; 
default://隨機 
$posX = rand(0,($ground_w - $w)); 
$posY = rand(0,($ground_h - $h) ); 
break; 

//設定影像的混色模式 
imagealphablending($ground_im, true); 
if($isWaterImage)//pywater $1,$im,{hao{haalp=$imco,$imcoal $ posY, 0, 0, $water_w,$water_h);//拷貝水印到目標檔 

else//文字水印 

if( !emptyempty($textColor) && (strlen($textor)==7) ) 

$R = hexdec(substr($textColor,1,2)); 
$G = hexdec(substr($textColor,3,2)); 
$B = hexdec(substr($textColor,3)); 
$B = hexdec(substr($textColor,5) ); 

else 

die(」水印文字顏色格式不正確! ”); 

imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B)); 

//產生水印後的圖片@unlink($groundImage); 
switch($ground_info[2])//取得背景圖片的格式 

case 1:imagegif($ground_im,$groundImage); 。 ; 
if(isset($water_im)) imagedestroy($water_im); 
unset($ground_info); 
imagedestroy($ground_im); 

//————————————————— —————————————— 
$id=$_REQUEST['id']; 
$num = count($_FILES['userfile']['name']); 
print_r($ _FILES['userfile']); 
print_r($_FILES['userfile']['name']); 
echo $num; 
echo “
”; 
if(isset($id)){ ($i=0;$iif(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size']>0) 

$uploadfile = “./”.time() . ”_”.$_FILES['使用者檔案'][姓名][$i]; 
回顯「
」; 
echo $uploadfile; 
if (copy($_FILES['userfile']['tmp_name' ][$i], $uploadfile))

echo “確定
”; 
//文字水印 
//imageWaterMark($uploadfile,5,””,”HTTP://www.lvye.info” ,5,”#cccccc“); 
//圖片水印 
$waterImage=”logo_ok1. gif”;//水印圖片路徑 
imageWaterMark($uploadfile,9,$waterImage); 
imageWaterMark($uploadfile,9,$waterImage); 
imageWaterMark($uploadfile,9,$waterImage); 
imageWaterMark($uploadfile,9,$waterImage); 
.$uploadfile."" border=”0”>”; 

else 

echo「失敗
」; 



}? > 


for($a=0;$aecho “檔案:
” ; 

? > 
 
表格> 

程式碼4 
複製程式碼 程式碼如下:
增加中文水印
/*--------- ------------------- ------------------------------- -- 
**描述:這是用於給指定圖片加上底部浮水印(不)佔用圖片顯示區域)的自訂類,需要建立物件呼叫
**建立:2007-10-09 
**更新:2007 -10-09 
**說明:1、需要gd庫支持,需要iconv支持( php5已經包含不用加載)
2、只適合透明類型的圖片,jpg/jpeg/gif/png,其他類型不處理
3 、注意圖片所在目錄的屬性必須可寫
4、呼叫範例:
$objImg = new MyWaterDownChinese(); 
$objImg->Path = "images/"; 
$objImg->FileName = "1.jpg";
$objImg->Text = "HAHAKONGJIAN[url]HTTP://HI.BAIDU.COM/LYSONCN[/url]"; 
$objImg->Font = "./font/simhei.ttf"; 
$objImg- >Run(); 
**成員函數: 
-------------------------------------- ------------------ ---------------------*/ 
class MyWaterDownChinese{ 
var $Path = "./"; //圖片目錄所在相對於呼叫此類別的頁面的相對路徑
var $FileName = ""; //圖片的名稱,如「1.jpg」 
var $Text = ""; //圖片要加上浮水印文字,支援中文
var $TextColor = "#ffffff"; //文字的顏色,gif圖片時,字體顏色只能為黑色
var $TextBgColor = "#000000"; //文字背景條的顏色
var $Font = "c://windows//fonts//simhei.ttf"; // 字體的棚目錄,相對路徑 
var $OverFlag = true; //是否要覆蓋原圖,預設為覆蓋,不覆蓋時,自動在原圖檔案名稱後+"_water_down",如「1.jpg」=> "1_water_down.jpg" 
var $BaseWidth = 200; //圖片的寬度至少要>=200,才會加上水印文字。
//---------------------------- ------------------- ------------------- 
//功能:類別的建構子(php5. 0以上的形式) 
//參數:無 
//回傳:無 
function __construct(){;} 
//------------------------ ----------------- --------------------------------------- 
//功能:類別的解析結構函數( php5.0以上的形式) 
//參數:無 
//回傳:無 
function __destruct(){;} 
//--------------- ----- --------------------------------------------- - 
//- ----------------------------------- 
//功能:物件運作函數,為圖片加上浮水印 
//參數:無 
//回傳:無 
function Run() 

if($this->FileName == "" || $this->Text == "")
回傳; 
//|| 安裝是否GD庫 
if(false == function_exists("gd_info")) 

echo "系統沒有安裝GD庫,不能給圖片加水印."; 
回傳; 

//設定輸入圖片路徑名稱 
$arr_in_name =explode(".",$this->FileName); 
// 
$inImg = $this->Path.$this->FileName; 
$outImg = $inImg ; $this->Path.$arr_in_name[0]."_tmp.".$arr_in_name[1]; //暫時處理的圖片,很重要
if(!$this->OverFlag)
$outImg = $this-> Path.$arr_in_name[0]."_water_down.".$arr_in_name[1]; 
//偵測圖片是否有
if(!file_exists($inImg))
return ; 🎜//取得圖片的屬性 
$groundImageType = @getimagesize($inImg); 
$imgWidth = $groundImageType[0]; 
$imgHeight = $groundImageType[1]; $imgWidth BaseWidth) //小於基本寬度,不處理 
return; 
//圖片不是jpg/jpeg/gif/png時,不處理 
switch($imgType) 
{ image = imagecreatefromgif($inImg); 
$this->TextBgColor = "#ffffff"; //gif圖片字體只能為黑,所以背景顏色就設定為白色 
break; 
case 2: 
$image = jpage$ $inImg); 
break; 
case 3: 
$image = imagecreatefrompng($inImg); 
break; 
default: 
return; hexdec(substr($this->TextColor,1,2)),hexdec(substr($this->TextColor,3,2)),hexdec(substr($this->TextColor,5,2))); / /文字顏色 
//產生一個空的圖片,它的高度在底部增加水印高度 
$newHeight = $imgHeight+20; 
$objTmpImg = @imagecreatetruecolor($imgWidth,$newHeight); $objTmpImg,hexdec(substr($this->TextBgColor,1,2)),hexdec(substr($this->TextBgColor,3,2)),hexdec(substr($this->TextBgColor,5,2)) ); //背景顏色 
//填滿圖片的背景顏色 
@imagefill ($objTmpImg,0,0,$colorBg); 
//把原圖copy到臨時圖片中 
@imagecopy($objTmpImg,$objTmpImg,$imjTmpImg,$objTmpImg,$objTmpImg,$objTmpImg,$objTmpImg,$objTmpImg,$objTmpImg,$objTmpImg 0,0,0,0,$imgWidth,$imgHeight); 
//建立要寫入的水印文字物件 
$objText = $this->createText($this->Text); 
//計算要寫入的水印文字的位置 
$x = 5; 
$y = $newHeight-5; 
//寫入文字水印 
@imagettftext($objTmpImg,10,0,$x,$y,$color,$this- >Font,$objText); 
//產生新的圖片,臨時圖片 
switch($imgType) 

case 1: 
imagegif($objTmpImg,$tmpImg); 
imagegif($objTmpImg,$tmpImg); objTmpImg,$tmpImg); 
break; 
case 3: 
imagepng($objTmpImg,$tmpImg); 
break; 
default: 
return; 
break; 

//釋放資源 
@imagedestroy($objTmpImg);
@imagedestroy($image); 
//重新命名檔案 
if($this->OverFlag) 

//覆蓋原圖 
@unlink($inImg); 
//覆蓋原圖 
@unlink($inImg);

else 

//不覆蓋原圖 
@rename($tmpImg,$outImg); 


//------------------- ------------------- 
//功能:建立浮水印文字物件 
//參數:無 
//回傳:建立的浮水印文字物件 
function createText($instring ) 

$outstring=""; 
$max=strlen($instring); 
for($i=0;$i{ 
$h=ord($instring[$i++) 

$h=ord($instring[$i ]); 
if($h>=160 && $i{ 
$outstring .= "".base_convert(bin2hex(iconv("gb2312","ucs-2",substr( $instring,$i,2))),16,10).";"; 
$i++; 

else 

$outstring .= $instring[$i]; 
} ; 

}//class 
?> 
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn