PHP添加水印后图像变的全黑 我也遇到这种情况,一般是对PNG格式的白色背景图添加水印就会变黑色背景 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //嵌入水印程序, 文字水印和图片水印请分别添加!!!function setWater($imgSrc,$Img,$Text,$TextColor,$Pos,$fontType,$Type,$fontSize){ /*参数说明:$imgSrc:目标图片,可带相对目录地址,$Img:水印图片,可带相对目录地址,支持PNG和GIF两种格式,如水印图片在执行文件目录下,可写成:/.gif$Text:给图片添加的水印文字$TextColor:水印文字的字体颜色$Pos:图片水印添加的位置,取值范围:0~90:随机位置,在1~8之间随机选取一个位置1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右$fontType:具体的字体库,可带相对目录地址$Type:图片添加水印的方式,img代表以图片方式,text代表以文字方式添加水印*/ $srcInfo = @getimagesize($imgSrc); $srcImg_w = $srcInfo[0]; $srcImg_h = $srcInfo[1]; switch ($srcInfo[2]) { case 1: $srcim =@imagecreatefromgif($imgSrc); if($srcim==false) echo "打开失败!"; break; case 2: //header("Content-Type: image/jpeg"); $srcim =@imagecreatefromjpeg($imgSrc); //print_r("hi, i am jpg file"); //imagejpeg($srcim); /*imagejpeg($srcim,"temp.jpg"); ?> <img src="temp.jpg"> <? */ if($srcim==false) echo "打开失败!"; break; case 3: $srcim =@imagecreatefrompng($imgSrc); if($srcim==false) echo "打开失败!"; break; default: die("不支持的图片文件类型"); exit; } if(!strcmp($Type,"img")) { //print_r("</br> hello ! img"); if(!file_exists($Img) || empty($Img)) { return; } $ImgInfo = @getimagesize($Img); $Img_w = $ImgInfo[0]; $Img_h = $ImgInfo[1]; if($srcImg_w < $Img_w || $srcImg_h < $Img_h) { return; } //print_r("</br> the imginfo is"); //print_r($ImgInfo[2]); switch ($ImgInfo[2]) { case 1: $im =@imagecreatefromgif($Img); if($im==false) echo "打开失败!"; break; case 2: $im =@imagecreatefromjpeg($Img); if($im==false) echo "打开失败!"; break; case 3: $im =@imagecreatefrompng($Img); if($im==false) echo "打开失败!"; break; default: die("不支持的水印图片文件类型"); exit; } $logow = $Img_w; $logoh = $Img_h; } if(!strcmp($Type,"text")) { //print_r("</br> hello ! text"); //$fontSize = 86; //middle if(!empty($Text)) { //print_r($fontType); if(!file_exists($fontType)) { //print_r("</br> hello ! no fonttype"); return; } } else { //print_r("</br> hello ! no text"); return; } //print_r("</br> hello ! i am before imagettfbbox"); $box = imagettfbbox($fontSize, 0, $fontType,$Text); //print_r("</br> hello ! i am after imagettfbbox"); $logow = max($box[2], $box[4]) - min($box[0], $box[6]); $logoh = max($box[1], $box[3]) - min($box[5], $box[7]); } if($Pos == 0) { $Pos = rand(1, 9); } switch($Pos) { case 1: $x = +25; $y = +125; break; case 2: $x = ($srcImg_w - $logow) / 2; $y = +5; break; case 3: $x = $srcImg_w - $logow - 135; $y = +115; break; case 4: $x = +5; $y = ($srcImg_h - $logoh) / 2; break; case 5: // print_r("</br> hello ! I AM AT 5"); $x = ($srcImg_w - $logow) / 2; $y = ($srcImg_h - $logoh) / 2; break; case 6: // print_r("</br> hello ! I AM AT 6"); $x = $srcImg_w - $logow - 5; $y = ($srcImg_h - $logoh) / 2; break; case 7: $x = +25; $y = $srcImg_h - $logoh - 115; break; case 8: $x = ($srcImg_w - $logow) / 2; $y = $srcImg_h - $logoh - 5; break; case 9: //print_r("</br> Hi, i am at pos 9 "); $x = $srcImg_w - $logow - 5; $y = $srcImg_h - $logoh -5; break; default: die("此位置不支持"); exit; } /* print_r("</br> hello i am before imagecreatetruecolor!"); print_r($srcImg_w); print_r($srcImg_h);*/ $dst_img=@imagecreatetruecolor($srcImg_w, $srcImg_h); //建立空白背景,真彩色图片 //$dst_img=imagecreate($srcImg_w, $srcImg_h); /*print_r($dst_img); print_r("</br> hello i am after imagecreatetruecolor!!"); */ imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h); //print_r("</br> hello!"); if(!strcmp($Type,"img")) { imagecopy($dst_img, $im, $x, $y, 0, 0, $logow, $logoh); imagedestroy($im); } if(!strcmp($Type,"text")) { //print_r("</br> hello ! text2"); $rgb = explode(',', $TextColor); $color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]); imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$Text); } switch ($srcInfo[2]) { case 1: imagegif($dst_img, $imgSrc); break; case 2: //print_r("hello!"); imagejpeg($dst_img, $imgSrc,97); //bool imagejpeg ( resource image [, string filename [, int quality]] ) quality 是imagejpeg独有的参数(0~100),默认是75,0是最差,文件最小,100是最佳,文件最大。 break; case 3: imagepng($dst_img, $imgSrc); break; default: die("不支持的水印图片文件类型"); exit; } /* $ed_img=""; switch ($srcInfo[2]) { case 1: imagegif($dst_img, $ed_img); break; case 2: //print_r("hello!"); imagejpeg($dst_img, $ed_img); break; case 3: imagepng($dst_img, $ed_img); break; default: die("不支持的水印图片文件类型"); exit; }*/ imagedestroy($dst_img); imagedestroy($srcim); //return $ed_img;} PHP问题 关于php读取sql server时小数点的问题 checkbox变成神仙了?困扰我好多天了 PHP中怎么对URL地址进行编解码? 关于字符交集方法 php fileatime取不到上次访问时间怎么办? 高分求一个函数 copy 目录的函数,在线等 急 关于 session_start 和 header 文件输出 问题 请问PHP中有什么可以代替ASP中的 XMLHTTP 对查询的结果集如何进行分页?? 关于include错误的问题 php 日期 月份
function setWater($imgSrc,$Img,$Text,$TextColor,$Pos,$fontType,$Type,$fontSize)
{
/*
参数说明:$imgSrc:目标图片,可带相对目录地址,
$Img:水印图片,可带相对目录地址,支持PNG和GIF两种格式,如水印图片在执行文件目录下,可写成:/.gif
$Text:给图片添加的水印文字
$TextColor:水印文字的字体颜色
$Pos:图片水印添加的位置,取值范围:0~9
0:随机位置,在1~8之间随机选取一个位置
1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
$fontType:具体的字体库,可带相对目录地址
$Type:图片添加水印的方式,img代表以图片方式,text代表以文字方式添加水印
*/
$srcInfo = @getimagesize($imgSrc);
$srcImg_w = $srcInfo[0];
$srcImg_h = $srcInfo[1];
switch ($srcInfo[2])
{
case 1:
$srcim =@imagecreatefromgif($imgSrc);
if($srcim==false)
echo "打开失败!";
break;
case 2:
//header("Content-Type: image/jpeg");
$srcim =@imagecreatefromjpeg($imgSrc);
//print_r("hi, i am jpg file");
//imagejpeg($srcim);
/*imagejpeg($srcim,"temp.jpg");
?> <img src="temp.jpg"> <? */
if($srcim==false)
echo "打开失败!";
break;
case 3:
$srcim =@imagecreatefrompng($imgSrc);
if($srcim==false)
echo "打开失败!";
break;
default:
die("不支持的图片文件类型");
exit;
}
if(!strcmp($Type,"img"))
{
//print_r("</br> hello ! img");
if(!file_exists($Img) || empty($Img))
{
return;
}
$ImgInfo = @getimagesize($Img);
$Img_w = $ImgInfo[0];
$Img_h = $ImgInfo[1];
if($srcImg_w < $Img_w || $srcImg_h < $Img_h)
{
return;
}
//print_r("</br> the imginfo is");
//print_r($ImgInfo[2]);
switch ($ImgInfo[2])
{
case 1:
$im =@imagecreatefromgif($Img);
if($im==false)
echo "打开失败!";
break;
case 2:
$im =@imagecreatefromjpeg($Img);
if($im==false)
echo "打开失败!";
break;
case 3:
$im =@imagecreatefrompng($Img);
if($im==false)
echo "打开失败!";
break;
default:
die("不支持的水印图片文件类型");
exit;
}
$logow = $Img_w;
$logoh = $Img_h;
}
if(!strcmp($Type,"text"))
{
//print_r("</br> hello ! text");
//$fontSize = 86; //middle
if(!empty($Text))
{
//print_r($fontType);
if(!file_exists($fontType))
{
//print_r("</br> hello ! no fonttype");
return;
}
}
else
{
//print_r("</br> hello ! no text");
return;
}
//print_r("</br> hello ! i am before imagettfbbox");
$box = imagettfbbox($fontSize, 0, $fontType,$Text);
//print_r("</br> hello ! i am after imagettfbbox");
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
}
if($Pos == 0)
{
$Pos = rand(1, 9);
}
switch($Pos)
{
case 1:
$x = +25;
$y = +125;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 135;
$y = +115;
break;
case 4:
$x = +5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 5:
// print_r("</br> hello ! I AM AT 5");
$x = ($srcImg_w - $logow) / 2;
$y = ($srcImg_h - $logoh) / 2;
break;
case 6:
// print_r("</br> hello ! I AM AT 6");
$x = $srcImg_w - $logow - 5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 7:
$x = +25;
$y = $srcImg_h - $logoh - 115;
break;
case 8:
$x = ($srcImg_w - $logow) / 2;
$y = $srcImg_h - $logoh - 5;
break;
case 9:
//print_r("</br> Hi, i am at pos 9 ");
$x = $srcImg_w - $logow - 5;
$y = $srcImg_h - $logoh -5;
break;
default:
die("此位置不支持");
exit;
}
/* print_r("</br> hello i am before imagecreatetruecolor!");
print_r($srcImg_w);
print_r($srcImg_h);*/
$dst_img=@imagecreatetruecolor($srcImg_w, $srcImg_h); //建立空白背景,真彩色图片
//$dst_img=imagecreate($srcImg_w, $srcImg_h);
/*print_r($dst_img);
print_r("</br> hello i am after imagecreatetruecolor!!"); */
imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
//print_r("</br> hello!");
if(!strcmp($Type,"img"))
{
imagecopy($dst_img, $im, $x, $y, 0, 0, $logow, $logoh);
imagedestroy($im);
}
if(!strcmp($Type,"text"))
{
//print_r("</br> hello ! text2");
$rgb = explode(',', $TextColor);
$color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$Text);
}
switch ($srcInfo[2])
{
case 1:
imagegif($dst_img, $imgSrc);
break;
case 2:
//print_r("hello!");
imagejpeg($dst_img, $imgSrc,97); //bool imagejpeg ( resource image [, string filename [, int quality]] ) quality 是imagejpeg独有的参数(0~100),默认是75,0是最差,文件最小,100是最佳,文件最大。
break;
case 3:
imagepng($dst_img, $imgSrc);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
/*
$ed_img="";
switch ($srcInfo[2])
{
case 1:
imagegif($dst_img, $ed_img);
break;
case 2:
//print_r("hello!");
imagejpeg($dst_img, $ed_img);
break;
case 3:
imagepng($dst_img, $ed_img);
break;
default:
die("不支持的水印图片文件类型");
exit;
}*/
imagedestroy($dst_img);
imagedestroy($srcim);
//return $ed_img;
}