我正在用
PHP打印文本到图像.但是,函数imagettftext()使用基线,而我需要垂直居中的文本.
所以,我需要一种打印文本的方法,而不是从顶部到基线的距离,而是从顶部到顶部的边界框,或者我需要一种使用这种方法,我可以确定边界框顶部和基线之间的距离.
显然我很混淆你所以,要明确:我知道函数imagettfbBox().使用该功能,我可以确定生成的文本框的高度和宽度.然而,当使用imagettftext()打印时,它的高度对于垂直对齐是完全无用的,因为Y参数不是距离顶部的距离(甚至是底部,但至少我可以使用的高度)但距离文本的基线的距离.
编辑:为什么我不接受最新的答案?
我不知道答案是否仍然感兴趣.然而,imagettfbBox()函数给你更多的信息,而不仅仅是边框的高度和宽度.它的设计完全是为了返回imagettftext()所需的信息来管理文本.
原文链接:https://www.f2er.com/php/130958.html诀窍在于,从imagettfbBox()返回的坐标与绝对左上角无关,而与特定文本的字体基线无关.这是原因,因为方框是以点坐标指定的,这些通常是负数.
简而言之:
$dims = imagettfbBox($fontsize,$font,$text); $ascent = abs($dims[7]); $descent = abs($dims[1]); $width = abs($dims[0])+abs($dims[2]); $height = $ascent+$descent; ... // In the example code,for the vertical centering of the text,consider // the simple following formula $y = (($imageHeight/2) - ($height/2)) + $ascent;
这对我的项目是完美的.
希望这个帮助.
对不起英语马可.