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