试用楼上的代码,还有不足的地方,我在使用过程中出现了乱码。我这里修改了一下:
/* 返回一个字符的数组 */
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);