我正在尝试使用下面找到的函数在曲线上包装文本。但是,无论文本有多宽,这都不会考虑将文本对齐。为了解决这个问题,我使用绑定框计算了文本的宽度。
$type_space=imagettfbbox($fontSize, 0, $fontname, $text);
$image_width = abs($type_space[4] - $type_space[0]) + 10;
然而,由此,我需要找到一种可以根据宽度调整开始$angle
的方法。我玩了很多设置,但似乎无法找到正确的数学。任何帮助都会很棒,谢谢!
曲线功能
function imagettftextarc($image, $size, $angle, $x, $y, $r, $color, $fontfile, $text, $dir=false){
$sbox=imagettfbbox($size, 0, $fontfile, ' ');
$sbox=($sbox[2]-$sbox[0])*0.1;
$angle=$angle*M_PI/180;
foreach(preg_split('//u', $text) AS $t){
$px=$x+$r*cos($angle);
$py=$y+$r*sin($angle);
$dirangle=(360-(M_PI/2+$angle)*180/M_PI+($dir?180:0))%360;
imagettftext($image, $size, $dirangle, $px, $py, $color, $fontfile, $t);
$box=imagettfbbox($size, 0, $fontfile, $t);
$dx=$box[2]-$box[0];
$da=abs(asin(($dx+$sbox)/$r));
if($dir){
$angle-=$da;
}else{
$angle+=$da;
}
}
}
可能的解决方案 我不确定如何执行此操作,但如果它是一个水平展开的完整360圆圈,则可能会计算出曲线的长度。然后将新宽度除以展开的宽度,以创建与需要更改的度数相关的值。