利用php将图片写到另一张图片上及在图片上写字

实用教程 3年前 (2018) Mgo
1

这里为大家提供的是一个可以在图片上任意位置写字并能定义字体、字号、每行宽度、行高的方案

//设置底图 $image_bg = imagecreatefromjpeg(ROOT_PATH."public/bgimg.jpg"); //将图片写到底图上 $image_headimg_1 = imagecreatefromjpeg("本地图片路径");
imagecopymerge($image_bg, $image_headimg_1, 330, 1020, 0, 0, 130, 130, 100); //重复可将第二张图片写在底图上 $image_headimg_2 = imagecreatefromjpeg("本地图片路径");
imagecopymerge($image_bg, $image_headimg_2, 330, 1020, 0, 0, 130, 130, 100); //定义文字,此处将定义的文字设定为二维数组 $arr = array(
    array("网站名:","红客帝国"),
    array("网站网址:","www.hongkediguo.com"),
    array("","如果没有标题,前一个元素设置为空即可"),
    ); //调用在图片上写字的方法 $this->certMakettftext($image_bg, $arr, 18, 200, 200, 18, 12); //多个位置时再定义一个数组即可 $arr2 = array(
    array("网站名2:","IT基地"),
    array("网站网址2:","www.hongkediguo.com"),
    array("","如果没有标题,前一个元素设置为空即可2"),
    ); //再次调用在图片上写字的方法 $this->certMakettftext($image_bg, $arr2, 18, 200, 400, 18, 12); //生成图片 $fileUrl = ROOT_PATH."public/uploads/".date('YmdHis').'_'.rand(1000,9999).".jpg"; //图片存储地址 imagejpeg($image_bg, $fileUrl);
imageDestroy($image_bg); //关闭资源流

以下是在图片上按自定义方式写字的方法

/**
 * 图片上写入文字
 * $image 本地图片路径
 * $arr 文字集合
 * $size 字号
 * $showX 起始横坐标
 * $showY 起始纵坐标
 * $lineheight 行高
 * $maxWidth 每行最大字数
 * $font 字体
 */ public function certMakettftext($image,$arr,$size=10,$showX,$showY,$lineheight=32,$maxWidth=32,$fonts="simsun.ttc"){ if( empty($arr) || empty($showX) || empty($showY) || empty($lineheight) ){ return '参数缺失~';
    }
    Header("Content-type:image/png");
    $white = imagecolorallocate($image,100,100,100); //设置一个颜色变量为黑色 $font = ROOT_PATH."public/fonts/".$fonts; //字体所在位置 $angle = 0;
    $i = 0;
    foreach($arr as $v){ //根据行数设定Y坐标点 $y = $showY + $lineheight * $i; //计算首行缩进长度,用空格代替 $titleKongge = ''; for($k=1; $k0],'UTF8')*2; $k++){
            $titleKongge .= " ";
        }
        $bodyArr = $this->str_split_unicode($v[1],$maxWidth); //字符串以指定个数拆分成数组 if(count($bodyArr)>1){
            $bodyStr = '';
            $j = 1;
            foreach($bodyArr as $val){
                $bodyStr .= $j==1 ? $val."\n" : $titleKongge.$val."\n"; //追加换行符和首行缩进空格 $j++;
                $i = $i + 0.42 + $j * 0.015;
            }
            $text = $v[0].$bodyStr;
        }else{
            $text = $v[0].$v[1];
        }
        imagettftext($image, $size, $angle, $showX, $y, $white, $font, $text);
        $i++;
    } return $image;
}

以下是将字符串根据设定的每行字数拆分成数组(防止文字长度超出底图)

//把字符串按照指定长度截取成数组 public function str_split_unicode($str, $l=0) { if($l>0){
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        $len2 = strlen($str);
        $bili = $len2/$len; if($bili<=3){
            $i = ( 3 - $bili ) * 0.45;
            $l = $l * ( 1 + $i );
        } for ($i = 0; $i < $len; $i += $l) {
            $ret[] = mb_substr($str, $i, $l, "UTF-8");
        } return $ret;
    } return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
版权声明:Mgo 发表于 2018-06-03 9:07:05。
转载请注明:利用php将图片写到另一张图片上及在图片上写字 | 站长聚集地

1 条评论