如何确定在网页上呈现的字符串的长度(以像素为单位)?

时间:2009-10-29 05:17:52

标签: php html svg

如果我知道字体大小(12)和字体系列(calibri),有没有办法确定给定字符串渲染后的长度(以像素为单位)?我绝对肯定字体和大小。是否有用于此目的的查找表来确定PHP代码本身的长度?我正在编写一个PHP脚本来动态生成一个SVG图像,其中包含填充了从数据库中提取的数据的各种框。问题是,如果字符串很大,我需要手动换行文本并增加框的大小。

由于

5 个答案:

答案 0 :(得分:17)

您可以使用 PHP GD 将字符串渲染为图像并获取生成图像的大小。

如果你使用它,它应该工作:

   list($left,, $right) = imageftbbox( 12, 0, "arial.ttf", "Hello World");

   $width = $right - $left;

答案 1 :(得分:17)

使用PHP函数imagettfbbox来获取给定字符串的边界框的大小。

另一方面,如果您想在客户端处理它, 也可以使用javascript to manipulate SVG images。这样,如果客户端具有指定的字体,则无关紧要......

答案 2 :(得分:4)

你的标题和实际帖子似乎说的略有不同。我猜你真正在问的是,是否可以确定网页上呈现的文字的宽度(以PHP为单位 (在网页呈现之前)。

如果是这样,答案是“不”。用户的计算机上可能无法显示所述字体;他/她可能已应用自定义样式表;使用大字体;等...

可以做的是确定在页面呈现后使用javascript 的宽度(显然,你也可以在其他页面中执行此操作,并希望没有任何更改,直到然后)并将其提交回PHP。通过一些聪明的AJAX,您甚至可以在同一页面上执行此操作。

有关如何在javascript中执行此操作的详细信息,请查看this question

答案 3 :(得分:3)

使用jQuery,

$("text").each(function(){alert(this.innerHTML+" is "+$(this).width()+" pixels.");});

答案 4 :(得分:2)

如果要使用PHP的内置字体确定文本的字符串长度(例如,如果您使用的是imagestring()),则可以使用:

imagefontwidth()


$text = "Your text here"
$fontSize = 5;

$textLength = imagefontwidth($fontSize) * strlen($text);

如果您不使用Build-In-Fonts,请使用imagettfbbox(),如上所述。