曲线上的中心文字,PHP GD

时间:2018-01-29 01:33:59

标签: php html gd

我正在尝试使用下面找到的函数在曲线上包装文本。但是,无论文本有多宽,这都不会考虑将文本对齐。为了解决这个问题,我使用绑定框计算了文本的宽度。

$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圆圈,则可能会计算出曲线的长度。然后将新宽度除以展开的宽度,以创建与需要更改的度数相关的值。

0 个答案:

没有答案