PHP将图片和文字合成到一张背景图上

PHP将图片和文字合成到一张背景图上
    /**
     * 将两张图片合成一张
     * $bg_path    背景图地址
     * $poster     图片2
     * $x           图片2在背景图片上位置的左边距,单位:px (例:436)
     * $y           图片2在背景图片上位置的上边距,单位:px (例:1009)
     * $poster_w	图片2宽度,单位:px (例:200)
     * $poster_y		图片2高度,单位:px (例:300)
     * $echo_path   生成的新图片存放路径
     **/
    public function createPoster($bg_path, $poster, $x, $y, $poster_w, $poster_y, $echo_path, $is_base64 = 0){
        $background = imagecreatefromstring(file_get_contents($bg_path));
        $poster_res = imagecreatefromstring(file_get_contents($poster));
        //参数内容:目标图象连接资源,源图象连接资源,目标X坐标点,目标Y坐标点,源的X坐标点,源的Y坐标点,目标宽度,目标高度,源图象的宽度,源图象的高度
        imagecopyresampled($background, $poster_res, $x, $y, 0, 0, $poster_w, $poster_y, $poster_w, $poster_y);
        //输出到本地文件夹,返回生成图片的路径
        if(!is_dir(dirname($echo_path))){
            mkdir(dirname($echo_path), 0755, true);
            chown(dirname($echo_path), 'nobody');
            chgrp(dirname($echo_path), 'nobody');
        }

        if($is_base64){
            ob_start ();
            //imagepng展示出图片
            imagepng ($background);
            $imageData = ob_get_contents ();
            ob_end_clean ();
            //得到这个结果,可以直接用于前端的img标签显示
            $res = "data:image/jpeg;base64,". base64_encode ($imageData);
        }else{
            imagepng($background,$echo_path);
            $res = $echo_path;
        }
        imagedestroy($background);
        imagedestroy($poster_res);
        return $res;
    }
    /**
     * 给图片加文字
     * $bg_path    背景图地址
     * $text			要添加的文字
     * $x           文字在背景图片上位置的左边距,单位:px (例:436)
     * $y           文字在背景图片上位置的上边距,单位:px (例:1009)
     * $font_size	字体大小,单位:px (例:20)
     * $echo_path   生成的新图片存放路径
     **/
    public function imageAddText($bg_path, $text, $x, $y, $font_size, $echo_path){
        $background = imagecreatefromstring(file_get_contents($bg_path));
        $font = "/datacentr/fonts/simhei.ttf"; //字体在服务器上的绝对路径
        $black = imagecolorallocate($background, 0, 0, 0);//字体颜色黑色

        $str = mb_convert_encoding($text, "html-entities", "utf-8");

        imagefttext($background, $font_size, 0, $x, $y, $black, $font, $str);
        imagepng($background,$echo_path);
        imagedestroy($background);
        return $echo_path;
    }
	//文字在图片中居中算法
	//参数: font_size, 文字倾斜角度, 字体文件绝对路径, 文字内容
	$fontBox = imagettfbbox(78, 0, realpath("fzhtjt.ttf"), $title);//获取文字所需的尺寸大小 
 
    // 居中算法
    //$widht 背景图宽度   $height 背景图高度
    ceil(($widht- $fontBox[2]) / 2)  //文字在背景图中的起始宽度
    ceil(($height - $fontBox[1] - $fontBox[7]) / 2)  //文字在背景图中的高度
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值