通过PHP获得水印文字宽高的函数:
宽:imagefontwidth($font);
高:imagefontheight($font);
$font是字体大小(1-5)。
下面是通过面向过程的方法实现添加水印功能的代码:
/*
* $target_img:目标图像;
* $font_content:水印文字内容;
* $font_size:水印文字大小
* $num:水印放置的位置
*/
function water($target_img,$font_content,$font_size,$num){
//首先判断GD库是否打开&&目标文件是否存在&&目标文件是否是一个图片
if(extension_loaded('gd') && file_exists($target_img) && getimagesize($target_img)){
//获取文字宽高
$font_width = imagefontwidth($font_size)*strlen($font_content);
$font_height = imagefontheight($font_size);
//获取目标图片宽高
$target_img_info = getimagesize($target_img);
$target_img_width = $target_img_info[0];
$target_img_height = $target_img_info[1];
//判断水印文字的宽高是否超出目标图像的宽高
if($font_width
//获得图片类型
$target_img_type = substr(image_type_to_extension($target_img_info[2]),1);
//打开目标图像
eval('$img = imagecreatefrom'.$target_img_type.'($target_img);');
//确认水印放置的位置
//宽度居中
$x_center = ceil(($target_img_width - $font_width)/2);
//高度居中
$y_center = ceil(($target_img_height - $font_height)/2);
//宽度之差
$x_difference = $target_img_width - $font_width;
//高度之差
$y_difference = $target_img_height - $font_height;
switch($num){
//左上角
case 1:
$x = $y =10;
break;
//中间顶部
case 2:
$x = $x_center;
$y = 10;
break;
//右上角
case 3:
$x = $x_difference;
$y = 10;
break;
//右中间
case 4:
$x = $x_difference;
$y = $y_center;
break;
//右下角
case 5:
$x = $x_difference;
$y = $y_difference;
break;
//中间底部
case 6:
$x = $x_center;
$y = $y_difference;
break;
//左下角
case 7:
$x = 10;
$y = $y_difference;
break;
//左中间
case 8:
$x = 10;
$y = $y_center;
break;
//正中间
case 9:
$x = $x_center;
$y = $y_center;
break;
default:
die('请重新选择水印放置位置');
exit();
}
imagestring($img, $font_size, $x, $y, $font_content, imagecolorallocate($img, 255, 255, 255));
header('Content-type:image/jpeg');
imagejpeg($img,$target_img,100);
}else{
return false;
exit();
}
return true;
}else{
return false;
}
}
water('test.jpg','baidu',5,9);