给图片加水印的具体做法Word文件下载.docx
《给图片加水印的具体做法Word文件下载.docx》由会员分享,可在线阅读,更多相关《给图片加水印的具体做法Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
"
$waterText="
$textFont=5,$textColor="
#234567"
)
{
$isWaterImage=FALSE;
$formatMsg="
暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。
;
//读取水印文件
if(!
empty($waterImage)&
&
file_exists($waterImage)){
$isWaterImage=TRUE;
$water_info=getimagesize($waterImage);
/*
*getimagesize($waterImage)
*解释:
*这里$arr为一个数组类型
*$arr[0]为图像的宽度
*$arr[1]为图像的高度
*$arr[2]为图像的格式,包括jpg、gif和png等
*$arr[3]为图像的宽度和高度,内容为width="
xxx"
height="
yyy"
*/
$water_w=$water_info[0];
//取得水印图片的宽
$water_h=$water_info[1];
//取得水印图片的高
switch($water_info[2]){//取到水印图片的格式
case1:
$water_image=imagecreatefromgif($waterImage);
break;
case2:
$water_image=imagecreatefromjpeg($waterImage);
case3:
$water_image=imagecreatefrompng($waterImage);
default:
die($formatMsg);
}
}
//读取背景图片
if(file_exists($backImage)&
!
empty($backImage)){
$back_info=getimagesize($backImage);
$back_w=$back_info[0];
//取得背景图片的宽
$back_h=$back_info[1];
//取得背景图片的高
switch($back_info[2]){//取到水印图片的格式
$back_image=imagecreatefromgif($backImage);
$back_image=imagecreatefromjpeg($backImage);
$back_image=imagecreatefrompng($backImage);
}else{
die('
需要加水印的图片不存在!
'
);
//水印位置
if($isWaterImage){//图片水印
//图片型水印
$w=$water_w;
$h=$water_h;
$label="
图片的"
//文字型的水印
$temp=imagettfbbox(ceil($textFont*2.5),0,"
C:
\WINDOWS\Fonts\SIMLI.TTF"
$waterText);
*ceil()函数向上舍入为最接近的整数。
*
*imagettfbbox函数的坐标系统的认识
*写TTF文字到图中。
*语法:
arrayImageTTFBBox(intsize,intangle,stringfontfile,stringtext);
*返回值:
数组
*函数种类:
图形处理
*内容说明
*本函数将TTF(TrueTypeFonts)字型文字写入图片。
*参数size为字形的尺寸;
angle为字型的角度,顺时针计算,0度为水平,也就是三点钟的方向(由左到右),90度则为由下到上的文字;
*x,y二参数为文字的坐标值(原点为左下角);
参数col为字的颜色;
fontfile为字型文件名称,亦可是远端的文件;
*text当然就是字符串内容了。
返回值为数组,包括了八个元素,头二个分别为左下的x、y坐标,第三、四个为右下角的x、y坐标,第五、六及七、八二组分别为右上及左上的x、y坐标。
*注意的是欲使用本函数,系统要装妥GD及Freetype二个函数库。
*返回的内容如:
*0=>
2
*1=>
-1
*2=>
258
*3=>
*4=>
*5=>
-20
*6=>
*7=>
*//下面的是没用的:
*images_width=266
*images_height=29
*font_width=256
*font_height=19
*font_location_x=5
*font_location_y=-15
$w=$temp[2]-$temp[0];
$h=$temp[1]-$temp[7];
//也可以:
//$w=$temp[2]-$temp[6];
//$h=$temp[3]-$temp[7];
unset($temp);
文字的"
//检查水印图片的尺寸是否合适(背景图片必须在长宽上都要大于水印图片)
if(($back_h<
$h)||$back_w<
$w){
echo"
需要加水印的图片的长度或宽度比水印"
.$label."
还小,无法生成水印!
return;
//判断选择的水印位置在哪里
switch($waterPos){
case0:
//随机
$posX=rand(0,($back_w-$w));
$posY=rand(0,($back_h-$h));
break;
case1:
//1为顶端居左
$posX=0;
$posY=0;
case2:
//2为顶端居中
$posX=($back_w-$w)/2;
$posX=0;
case3:
//3为顶端居右
$posX=$ground_w-$w;
$posY=0;
break;
case4:
//4为中部居左
$posX=0;
$posY=($back_h-$h)/2;
case5:
//5为中部居中
$posX=($back_w-$w)/2;
case6:
//6为中部居右
$posX=$back_w-$w;
case7:
//7为底端居左
$posY=$back_h-$h;
case8:
//8为底端居中
case9:
//9为底端居右
$posY=$back_h-$h;
default:
$posX=rand(0,($back_w-$w));
//设定图像的混色模式
imagealphablending($back_image,TRUE);
/*
*intimagealphablending(resourceimage,boolblendmode)
*imagealphablending()允许在真彩色图像上使用两种不同的绘画模式。
*在混色(blending)模式,alpha通道色彩成分提供给所有的绘画函数,
*例如imagesetpixel()决定底层的颜色应在何种程度上被允许照射透过。
作为结果,
*GD自动将该点现有的颜色和绘画的颜色混合,并将结果储存在图像中。
*结果的像素是不透明的。
*在非混色模式,绘画颜色连同其alpha通道信息一起被拷贝,替换掉目标像素。
*混色模式在画调色板图像时不可用。
如果blendmode为TRUE,则启用混色模式,否则关闭。
*注:
本函数是PHP4.0.6添加的,需要GD2.0.1。
*/
if($isWaterImage)//图片型水印
{
imagecopy($back_image,$water_image,$posX,$posY,0,0,$water_w,$water_h);
//拷贝水印到目标文件
*imagecopy()
*imagecopy()函数用于拷贝图像或图像的一部分,成功返回TRUE,否则返回FALSE。
*语法:
*boolimagecopy(resourcedst_im,resourcesrc_im,intdst_x,intdst_y,intsrc_x,intsrc_y,intsrc_w,intsrc_h)
*参数说明:
参数说明
*dst_im目标图像
*src_im被拷贝的源图像
*dst_x目标图像开始x坐标
*dst_y目标图像开始y坐标,x,y同为0则从左上角开始
*src_x拷贝图像开始x坐标
*src_y拷贝图像开始y坐标,x,y同为0则从左上角开始拷贝
*src_w(从src_x开始)拷贝的宽度
*src_h(从src_y开始)拷贝的高度
else{
if(!
empty($textColor)&
(strlen($textColor)==7)){
$R=hexdec(substr($textColor,1,2));
$G=hexdec(substr($textColor,3,2));
$B=hexdec(substr($textColor,5));
*hexdec()函数把十六进制转换为十进制。
}else{
die("
水印文字颜色格式不正确!
imagestring($back_image,$textFont,$posX,$posY,$waterText,imagecolorallocate($back_image,$R,$G,$B));
*imagestring--水平地画一行字符串。
*intimagestring(resourceimage,intfont,intx,inty,strings,intcol)
*imagestring()用col颜色将字符串s画到image所代表的图像的x,y座标处(图像的左上角为0,0)。
如果font是1,2,3,4或5,则使用内置字体。
//生成水印后的图片
@unlink($backImage);
*unlink()函数删除文件。
*若成功,则返回true,失败则返回false。
switch($back_info[2]){
case1:
imagegif($back_image,$backImage);
/*
*ImageGIF
*建立GIF图型。
*语法:
intimagegif(intim,string[filename]);
*返回值:
整数
*函数种类:
*内容说明
*本函数用来建立一张GIF格式图形。
参数im为使用ImageCreate()所建立的图片代码。
参数filename可省略,
*若无本参数filename,则会将图片指接送到浏览器端,记得在送出图片之前要先送出使用Content-type:
image/gif的标头字符串(header)到浏览器端,以顺利传输图片。
*若要使用透明背景的GIF图,也就是GIF89a的格式,需要先使用ImageColorTransparent()配置透明背景。
*本函数产生的GIF图,由于有版权的问题,因此在商业上的使用还要多加考量。
*/
case2:
imagejpeg($back_image,$backImage);
imagepng($back_image,$backImage);
default:
die($errorMsg);
//释放内存
if(isset($water_info))
unset($water_info);
if(isset($water_image))
imagedestroy($water_image);
unset($back_info);
imagedestroy($back_image);
}
//-----------------------------------------------------------------------------
if(!
empty($_FILES)){
$filename=$_FILES['
imagefile'
]['
name'
];
if(copy($_FILES['
tmp_name'
],$filename)){
$waterImage="
logo.jpg"
//水印图片路径
imageWaterMake($filename,5,$waterImage);
echo"
imgsrc=\"
.$filename."
\"
border=\"
1\"
>
no"
formenctype="
multipart/form-data"
method="
post"
文件:
inputname="
imagefile"
type="
file"
br>
inputtype="
submit"
value="
上传"
/form>