81、PHP 图像处理之获得文字宽高属性&图片水印函数功能

阅读() @2018-10-29 18:16:08

通过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','haha',5,9);

效果图如下:

PHP实现给图片添加水印功能函数

微信二维码
锐壳主机