ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
通过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_width && $font_height<$target_img_height){ //获得图片类型 $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);