PHP-php gd库制图,文字水印自动换行,数据不固定,

PHP-php gd库制图,文字水印自动换行,数据不固定,

归属感 发布于 2017-07-24 字数 29 浏览 1364 回复 2

想做个自动换行的功能!

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2017-08-11 2 楼

试用楼上的代码,还有不足的地方,我在使用过程中出现了乱码。我这里修改了一下:

/* 返回一个字符的数组 */
function chararray($str,$charset="utf-8"){
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
return $match;
}

/* 返回一个字符串在图片中所占的宽度 */
function charwidth($fontsize,$fontangle,$ttfpath,$char){
$box = @imagettfbbox($fontsize,$fontangle,$ttfpath,$char);
$width = max($box[2], $box[4]) - min($box[0], $box[6]);
return $width;
}

/* 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度, 编码 */
function autowrap($fontsize,$fontangle,$ttfpath,$str,$width,$charset='utf-8'){
$_string = "";
$_width = 0;
$temp = chararray($str);
//var_dump($temp);
foreach ($temp[0] as $k=>$v){
$w = charwidth($fontsize,$fontangle,$ttfpath,$v);
$_width += intval($w);
if (($_width > $width) && ($v !== "")){
$_string .= "n";
$_width = 0;
}
$_string .= $v;
$w = 0;
//echo $v;
}
$_string = mb_convert_encoding($_string, "html-entities","utf-8" );
return $_string;
}

$str = autowrap(12,0,'./Public/font/msyh.ttf','返回一个字符的数组返回一个字符的数组',100);

echo($str);

归属感 2017-08-08 1 楼

/**
* @desc GD库生成图片中文自动换行
* 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
* */
public function autowrap($fontsize, $angle, $fontface, $string, $width) {
$content = "";

// 将字符串拆分成一个个单字 保存到数组 letter 中
for ($i=0;$i<mb_strlen($string);$i++) {
$letter[] = mb_substr($string, $i, 1);
}

foreach ($letter as $l) {
$teststr = $content."".$l;
$testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
// 判断拼接后的字符串是否超过预设的宽度
if (($testbox[2] > $width) && ($content !== "")) {
$content .= "n";
}
$content .= $l;
}

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

return $content;
}