如果我知道字体大小(12)和字体系列(calibri),是否有一种方法可以确定给定字符串在呈现后所需的长度(以像素为单位)?我完全肯定字体和大小。有没有用于此目的的查找表来确定PHP代码本身的长度?我正在编写一个PHP脚本来动态生成一个SVG图像,其中包含填充了从数据库中提取的数据的各种框。问题是,如果字符串很大,我需要手动包装文本并增加框的大小。如何确定在网页上呈现的字符串的长度(以像素为单位)?
谢谢
如果我知道字体大小(12)和字体系列(calibri),是否有一种方法可以确定给定字符串在呈现后所需的长度(以像素为单位)?我完全肯定字体和大小。有没有用于此目的的查找表来确定PHP代码本身的长度?我正在编写一个PHP脚本来动态生成一个SVG图像,其中包含填充了从数据库中提取的数据的各种框。问题是,如果字符串很大,我需要手动包装文本并增加框的大小。如何确定在网页上呈现的字符串的长度(以像素为单位)?
谢谢
使用PHP函数imagettfbbox
得到边界框的尺寸为给定的字符串。
另一方面你可以也可以使用javascript to manipulate SVG images如果你想在客户端处理它。这样,如果客户有指定的字体或不是甚至不会没关系......
你的标题和实际的帖子似乎说略有不同的东西。我猜你真正要问的是,是否可以确定在您的PHP代码(在呈现网页之前)在网页上呈现的文本的像素宽度。
如果是这样,答案是“否”。所述字体可能在用户的计算机上不可用;他/他可能会使用自定义样式表;使用大字号;等等......
什么你可以做的是确定使用JavaScript 后的页面宽度呈现(当然,你可以做一些其他的一页,也希望没有什么变化,直到当时的)并提交回到PHP。有了一些聪明的AJAX,你甚至可以在同一页面上做到这一点。
有关如何在javascript中执行此操作的详细信息,请参阅this question。
您可以使用PHP GD将字符串渲染为图像并获取生成图像的大小。
如果您使用此,它应该工作:
list($left,, $right) = imageftbbox(12, 0, "arial.ttf", "Hello World");
$width = $right - $left;
似乎Crimson将字符串渲染为图像,但问题在于图像的大小,以便字符串能够正确匹配。这可以用GD库来完成吗?我认为GD没有换行选项。 – Abinadi 2009-10-29 05:56:27
+1 GD似乎很有帮助 – 2009-10-29 06:06:34
phalacee,我无法在GD中找到确定字符串宽度的方法。看起来我必须在图像宽度和高度参数之前调用imagecreate(),然后才能将字符串写入它,从而使练习成为无用的往返行程:( – 2009-10-29 06:25:55
使用jQuery,
$("text").each(function(){alert(this.innerHTML+" is "+$(this).width()+" pixels.");});
如果你想确定文本字符串的长度,使用PHP的内置的-fonts(例如,如果你正在使用和imagestring()),你可以使用:
imagefontwidth()
$text = "Your text here"
$fontSize = 5;
$textLength = imagefontwidth($fontSize) * strlen($text);
如果不使用内建的字体,使用imagettfbbox(),像上面提到。
这是我在回答我的答案时所考虑的功能......我的记忆力不如以前那么好...... – jsnfwlr 2009-10-30 08:40:51