PHP相片照片图片水印涵数:可用以相片和文字方式再加照片图片水印
03:45:17 (2892)
可用以相片和文字二种方式给相片再加照片图片水印。相片可用GIF,PNG,JPG三种文档文件格式,照片图片水印相片可用PNG和GIF
function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{
$srcInfo = @getimagesize($imgSrc);
$srcImg_w = $srcInfo[0];
$srcImg_h = $srcInfo[1];
switch ($srcInfo[2])
{
case 1:
$srcim =imagecreatefromgif($imgSrc);
break;
case 2:
$srcim =imagecreatefromjpeg($imgSrc);
break;
case 3:
$srcim =imagecreatefrompng($imgSrc);
break;
default:
die("兼容问题的相片文本文档类型");
exit;
}
if(!strcmp($markType,"img"))
{
if(!file_exists($markImg) || empty($markImg))
{
return;
}
$markImgInfo = @getimagesize($markImg);
$markImg_w = $markImgInfo[0];
$markImg_h = $markImgInfo[1];
if($srcImg_w $markImg_w || $srcImg_h $markImg_h)
{
return;
}
switch ($markImgInfo[2])
{
case 1:
$markim =imagecreatefromgif($markImg);
break;
case 2:
$markim =imagecreatefromjpeg($markImg);
break;
case 3:
$markim =imagecreatefrompng($markImg);
break;
default:
die("兼容问题的照片图片水印相片文本文档类型");
exit;
}
$logow = $markImg_w;
$logoh = $markImg_h;
}
if(!strcmp($markType,"text"))
{
$fontSize = 16;
if(!empty($markText))
{
if(!file_exists($fontType))
{
return;
}
}
else {
return;
}
$box = @imagettfbbox($fontSize, 0, $fontType,$markText);
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
}
if($markPos == 0)
{
$markPos = rand(1, 9);
}
switch($markPos)
{
case 1:
$x = +5;
$y = +5;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 5;
$y = +15;
break;
case 4:
$x = +5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 5:
$x = ($srcImg_w - $logow) / 2;
$y = ($srcImg_h - $logoh) / 2;
break;
case 6:
$x = $srcImg_w - $logow - 5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 7:
$x = +5;
$y = $srcImg_h - $logoh - 5;
break;
case 8:
$x = ($srcImg_w - $logow) / 2;
$y = $srcImg_h - $logoh - 5;
break;
case 9:
$x = $srcImg_w - $logow - 5;
$y = $srcImg_h - $logoh -5;
break;
default:
die("此位置兼容问题");
exit;
}
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
if(!strcmp($markType,"img"))
{
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
imagedestroy($markim);
}
if(!strcmp($markType,"text"))
{
$rgb = explode(',', $TextColor);
$color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);
}
switch ($srcInfo[2])
{
case 1:
imagegif($dst_img, $imgSrc);
break;
case 2:
imagejpeg($dst_img, $imgSrc);
break;
case 3:
imagepng($dst_img, $imgSrc);
break;
default:
die("兼容问题的照片图片水印相片文本文档类型");
exit;
}
imagedestroy($dst_img);
imagedestroy($srcim);
}
关键主要参数说明:
$imgSrc:整体总体目标相片,可带相对性性文档文件目录详尽详细地址,
$markImg:照片图片水印相片,可带相对性性文档文件目录详尽详细地址,可用PNG和GIF二种文档文件格式,如图所示片图片水印相片在推行文本文档mark文档文件目录下,可写成:mark/mark.gif
$markText:给相片再加的照片图片水印文字
$TextColor:照片图片水印文字的字体样式款式色彩
$markPos:相片照片图片水印再加的位置,取值范围:0~9
0:随意位置,在1~8正中间随意挑选一个位置
1:顶部居左 2:顶部竖直垂直居中 3:顶部居右 4:左边竖直垂直居中
5:相片管理方法管理中心 6:右边竖直垂直居中 7:底端居左 8:底端竖直垂直居中 9:底端居右
$fontType:具体的字体样式款式库,可带相对性性文档文件目录详尽详细地址
$markType:相片再加照片图片水印的方式,img寓意着以相片方式,text寓意着以文字方式再加照片图片水印
编号注释:
第四~6行:得到整体总体目标相片的总宽和高度
第八~22行:根据相片类型开启不一样的涵数,获得具体实际操作图像标示符
GetImageSize涵数技术专业专业知识点:GetImageSize无需安装 GD度即可运用,其返回值数据动能数字能量数组有四个原素。
[标识:內容1]
数据信息库数据库索引值0是相片高度。数据信息库数据库索引值1是相片的总宽。数据信息库数据库索引值2是相片的文本文档文档文件格式,其值1为GIF文档文件格式、2为JPEG/JPG文档文件格式、3为PNG文档文件格式。数据信息库数据库索引值3为相片的高与宽标志符串,height=xxx width=yyy。返回的相片总宽和高度公司都是清楚度(pixel)
第二4~58行:当选择相片方式给整体总体目标相片再加照片图片水印时,得到照片图片水印相片的总宽和高度,一般情况都是网站的logo。倘若整体总体目标相片比照片图片水印相片总宽或者高度小或者照片图片水印相片不容易有,则跳出来来这一涵数。
return语句技术专业专业知识点:马上return 说明统统不返回,马上结束这一涵数。还能够掌握成返回 NULL。
第六0~77行:当选择文字方式给整体总体目标相片再加照片图片水印时,最开始设定照片图片水印文字的规格,默认设置设定我设置为16px,你可以以以根据务必独立调整字体样式款式规格。倘若字体样式款式文本文档不容易有,跳出来来涵数,最后依据imagettfbbox涵数获得此设定文档文件格式的文字的虚拟总宽。
imagettfbbox涵数技术专业专业知识点:此涵数返回一个含有八个控制模块的数据动能数字能量数组说明文本外框的四个角,数据信息库数据库索引值含义:0寓意着左下角 X 位置,1寓意着坐下角 Y 位置,2寓意着右正下方 X 位置,3寓意着右正下方 Y 位置,4寓意着右上角 X 位置,5寓意着右上角 Y 位置,6寓意着左上边 X 位置,7寓意着左上边 Y 位置。此涵数同时要要GD 库和FreeType库的可用
max涵数返回关键主要参数招标值很大的值。
第79~125行:根据设定的相片照片图片水印位置计算具体坐标值,你可以以以根据具体实际效果具体提升照片图片水印的位置。
第一27~129行:新建一个和整体总体目标相片规格一致的相片。
注:由于imagecreatetruecolor涵数范围的是一个灰灰黑色相片,因而倘若你的整体总体目标相片是透明的,则转换成的新图将不可易是透明色。
第一31~162行:根据相片或者文字方式,最终转换成再加了照片图片水印的相片。
开启说明:
以涵数开启方式开启便可以,当然你要能够以类的方式封裝,或者你要能够根据务必将此涵数进一步细分化化操纵控制模块还能够。当然你现如今那般用也是没有一切难点的,我已检验过,问好心运用。
其他说明:
由于imagettftext和imagettfbbox涵数务必GD库和FreeType库的可用,倘若你的运行当然自然环境兼容问题GD库和FreeType库则文字方式就无法进行,你可以以以用imagestring涵数进行给相片再加文字照片图片水印,同时设定下text方式下的$logow和$logoh值便可以。
imagejpeg涵数还能够设置转化成的相片质量。