18-文件上傳+生成縮略圖+水印效果

 
18-文件上傳+生成縮略圖+水印效果

不少新聞網站上新聞圖片所有都添加了水印效果,其目的就是爲了防止盜鏈的狀況產生。因此,咱們今天將上一篇博文進行升級---添加水印效果!!

爲圖片添加水印的效果整體分爲兩大類:添加文字(又具體的分爲中文和英文)和添加Logo

1、 添加文本

添加文本的原理很是簡單,就是經過p_w_picpathttftext在原來圖像上的書寫文本
咱們先來固定一幅特定的圖片,而後在上面來書寫幾個字符吧!
原圖以下:
 

 
代碼以下:
 
 
<?php

$file = "./01.jpg";

$p_w_picpathResource = p_w_picpathcreatefromjpeg($file);

$imgWidth = p_w_picpathsx($p_w_picpathResource);

$imgHeight = p_w_picpathsy($p_w_picpathResource);

$white = p_w_picpathcolorallocate($p_w_picpathResource,255,255,255);

$text = "wuhua Blog";

$fontfile = "verdana.ttf";

$x = $imgWidth - 180;

$y = $imgHeight - 30;

p_w_picpathttftext ($p_w_picpathResource,20,0,$x,$y,$white,$fontfile,$text);
p_w_picpathjpeg($p_w_picpathResource,"watermark_01.jpg");

p_w_picpathdestroy($p_w_picpathResource);

?>
 
 
效果圖以下:
 

 
咱們再來添加幾個漢字吧!看起來也就是將英文字母換成漢字的問題!
 
源碼以下:

<?php

$file = "./01.jpg";

$p_w_picpathResource = p_w_picpathcreatefromjpeg($file);
 
$imgWidth = p_w_picpathsx($p_w_picpathResource);

$imgHeight = p_w_picpathsy($p_w_picpathResource);

$white = p_w_picpathcolorallocate($p_w_picpathResource,255,255,255);

$text = "吳華博客";

$fontfile = "STXINWEI.TTF";

$x = $imgWidth - 180;

$y = $imgHeight - 30;

p_w_picpathttftext ($p_w_picpathResource,30,0,$x,$y,$white,$fontfile,$text);
p_w_picpathjpeg($p_w_picpathResource,"watermark_01.jpg");

p_w_picpathdestroy($p_w_picpathResource);

?>
 
但是運行之後,效果圖倒是這樣的!
 

 
唉,這是怎麼了,難道代碼有錯誤嗎?檢查一遍後,沒有錯誤呀!啊,原來是字符編碼的問題!

好了!只要將字符編碼轉換一下就能夠了,因此,更改後的代碼以下:
 
<?php

$file = "./01.jpg";

$p_w_picpathResource = p_w_picpathcreatefromjpeg($file);

$imgWidth = p_w_picpathsx($p_w_picpathResource);

$imgHeight = p_w_picpathsy($p_w_picpathResource);

$white = p_w_picpathcolorallocate($p_w_picpathResource,255,255,255);

$text = "吳華博客";

$fontfile = "STXINWEI.TTF";

$text = iconv("gb2312","utf-8",$text);

$x = $imgWidth - 180;

$y = $imgHeight - 30;

p_w_picpathttftext ($p_w_picpathResource,30,0,$x,$y,$white,$fontfile,$text);
p_w_picpathjpeg($p_w_picpathResource,"watermark_01.jpg");

p_w_picpathdestroy($p_w_picpathResource);

?>
 
效果圖以下:
 
 

 
2、 添加Logo

咱們就拿新浪的Logo爲例吧!此時咱們須要到p_w_picpathcopymerge函數

源代碼以下:
 
<?php

$file = "./01.jpg";

$logoFile = "./logo.gif";

$spacer = 15;

$p_w_picpathResource = p_w_picpathcreatefromjpeg($file);

$imgWidth = p_w_picpathsx($p_w_picpathResource);

$imgHeight = p_w_picpathsy($p_w_picpathResource);

$logoResource = p_w_picpathcreatefromgif($logoFile);

$logoWidth = p_w_picpathsx($logoResource);

$logoHeight = p_w_picpathsy($logoResource);

p_w_picpathcopymerge($p_w_picpathResource,$logoResource,($imgWidth-$logoWidth-$spacer),($imgHeight-$logoHeight-$spacer),0,0,$logoWidth,$logoHeight,100);

p_w_picpathjpeg($p_w_picpathResource,"watermark_01.jpg");

p_w_picpathdestroy($p_w_picpathResource);

?>
 
效果以下:
 

 
3、 文件上傳+生成縮略圖+水印效果

操做步驟以下:

1. 建立圖形化的用戶界面(以下圖)
 

 
2. 上傳文件並添加水印

<?php

$filename = $_FILES["file"]["name"];

$tmpName = $_FILES["file"]["tmp_name"];

$errCode = $_FILES["file"]["error"];

$scalePercent = 0.5;

if($errCode == 0)

{

 list($imgWidth,$imgHeight,$imgType) = getp_w_picpathsize($tmpName);

 $destWidth = ceil($imgWidth * $scalePercent);

 $destHeight = ceil($imgHeight * $scalePercent);

 $destImage = p_w_picpathcreatetruecolor($destWidth,$destHeight);
 if($imgType == 1)

 {

  $createImage = "p_w_picpathcreatefromgif";

  $outImage = "p_w_picpathgif";

 }

 elseif ($imgType == 2)

 {

  $createImage = "p_w_picpathcreatefromjpeg";

  $outImage = "p_w_picpathjpeg";

 }

 elseif ($imgType == 3)

 {

  $createImage = "p_w_picpathcreatefrompng";

  $outImage = "p_w_picpathpng";

 }

 else

 {

  echo("文件類型錯誤!");

  exit;

 }

 $p_w_picpathResource = $createImage($tmpName);

 p_w_picpathcopyresampled($destImage,$p_w_picpathResource,0,0,0,0,$destWidth,$destHeight,$imgWidth,$imgHeight);

 $text = "Wuhua Blog";

 $fontfile = "verdana.ttf";

 $x = ($destWidth - 200);

 $y = ($destHeight - 35);

 $white = p_w_picpathcolorallocate($destImage,255,255,255);

 p_w_picpathttftext ($destImage,20,0,$x,$y ,$white,$fontfile,$text);

 $outImage($destImage,"watermark_{$filename}");

 p_w_picpathdestroy($p_w_picpathResource);

 p_w_picpathdestroy($destImage);

}

?>
 
具體的例子在附件中!
 
另外,由於51CTO中的附件字節數不能超過2MB,因此在案例2中將字體省略了!
相關文章
相關標籤/搜索