这里为大家提供的是一个可以在图片上任意位置写字并能定义字体、字号、每行宽度、行高的方案
//设置底图 $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);
}
热门文章
暂无文章
效果图呢?怎么不贴一张。