【发布时间】:2010-12-11 03:16:03
【问题描述】:
如果我知道字体大小 (12) 和字体系列 (calibri),有没有办法确定给定字符串在渲染后的长度(以像素为单位)?我绝对确定字体和大小。是否有任何用于此目的的查找表来确定 PHP 代码本身的长度?我正在编写一个 PHP 脚本来动态生成一个 SVG 图像,其中包含各种填充了从数据库中提取的数据的框。问题是如果字符串很大,我需要手动环绕文本并增加框的大小。
谢谢
【问题讨论】:
如果我知道字体大小 (12) 和字体系列 (calibri),有没有办法确定给定字符串在渲染后的长度(以像素为单位)?我绝对确定字体和大小。是否有任何用于此目的的查找表来确定 PHP 代码本身的长度?我正在编写一个 PHP 脚本来动态生成一个 SVG 图像,其中包含各种填充了从数据库中提取的数据的框。问题是如果字符串很大,我需要手动环绕文本并增加框的大小。
谢谢
【问题讨论】:
您的标题和实际发布的内容似乎略有不同。我猜您真正要问的是是否可以确定网页上呈现的文本的宽度(以像素为单位)在您的 PHP 代码中(在呈现网页之前)。
如果是这样,答案是“否”。所述字体可能在用户计算机上不可用;她/他可能应用了自定义样式表;使用大字体;等等……
你可以做的是在页面渲染之后使用javascript确定宽度(显然,你也可以在其他页面中这样做,并希望在此之前没有任何变化然后)并将其提交回 PHP。通过一些巧妙的 AJAX-ing,您甚至可以在同一页面上执行此操作。
查看this question 了解如何在 javascript 中执行此操作的详细信息。
【讨论】:
phalacee 的建议使用 GD 来找出它
您可以使用 PHP GD 将字符串呈现为图像并获取结果图像的大小。
如果你使用它,它应该可以工作:
list($left,, $right) = imageftbbox( 12, 0, "arial.ttf", "Hello World");
$width = $right - $left;
【讨论】:
imageftbbox有错别字
使用 PHP 函数 imagettfbbox 获取给定字符串的边界框大小。
另一方面,您也可以使用javascript to manipulate SVG images,以防您想在客户端处理它。这样,客户端是否具有指定的字体甚至都无关紧要......
【讨论】:
使用 jQuery,
$("text").each(function(){alert(this.innerHTML+" is "+$(this).width()+" pixels.");});
【讨论】:
如果你想确定文本的字符串长度,使用 PHP 的 Build-In-Fonts(例如,如果你使用 imagestring()),你可以使用:
imagefontwidth()
$text = "Your text here"
$fontSize = 5;
$textLength = imagefontwidth($fontSize) * strlen($text);
如果您不使用 Build-In-Fonts,请使用 imagettfbbox(),如上所述。
【讨论】: