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中将字体省略了!