诸位:
我将一幅JPG图像,通过setWater函数嵌入水印后(图片),像素数没变,但是总大小变小了很多(从1.4M变为350k左右)!!应该是某个函数影响了图像每个像素的丰富度或色彩变化度。。是imagecopy吗?还是imagecreatetruecolor?
请高人指点!!!!下边贴出嵌入水印函数:
//嵌入水印程序, 文字水印和图片水印请分别添加!!!
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: $srcim =@imagecreatefromjpeg($imgSrc); 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;
}
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"))
{
if(!empty($Text))
{
if(!file_exists($fontType))
{
//print_r("</br> hello ! no fonttype");
return;
}
}
else
{
//print_r("</br> hello ! no text");
return;
}
$box = imagettfbbox($fontSize, 0, $fontType,$Text);
$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 = +95;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 105;
$y = +85;
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($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);
break;
case 3:
imagepng($dst_img, $imgSrc);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
imagedestroy($dst_img);
imagedestroy($srcim);}
我将一幅JPG图像,通过setWater函数嵌入水印后(图片),像素数没变,但是总大小变小了很多(从1.4M变为350k左右)!!应该是某个函数影响了图像每个像素的丰富度或色彩变化度。。是imagecopy吗?还是imagecreatetruecolor?
请高人指点!!!!下边贴出嵌入水印函数:
//嵌入水印程序, 文字水印和图片水印请分别添加!!!
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: $srcim =@imagecreatefromjpeg($imgSrc); 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;
}
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"))
{
if(!empty($Text))
{
if(!file_exists($fontType))
{
//print_r("</br> hello ! no fonttype");
return;
}
}
else
{
//print_r("</br> hello ! no text");
return;
}
$box = imagettfbbox($fontSize, 0, $fontType,$Text);
$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 = +95;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 105;
$y = +85;
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($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);
break;
case 3:
imagepng($dst_img, $imgSrc);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
imagedestroy($dst_img);
imagedestroy($srcim);}
解决方案 »
- 在地址栏输入http://localhost却跳到百度搜索,用127.0.0.1能访问?
- 我做的新闻搜索引擎
- PHP中如何定义这样的变量在其他页面调用
- 关于点按钮在新窗口打开网页,高手指教了
- php论坛问题 SQL_ERROR - Unknown column 'auth' in 'field list'
- $result= ereg("^\d$", "1"); 返回什么
- 请教:如何获取当前页面的信息;
- delete from `topper` WHERE id in ( select id from topper where id=2)
- 求register_globals = On和register_globals = Off的不同用法(原代码)
- 菜鸟问题,请问高手,有的php编辑软件有dbg调试功能,请问这个是干嘛用的?
- PHP 如何获取protected属性?
- dedecms怎么实现4级栏目,具体请看内容
第三个参数设置的图片的质量,默认不是最佳。是不是这个原因导致的呢?