2009-10-29 52 views
19

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

谢谢

回答

16

使用PHP函数imagettfbbox得到边界框的尺寸为给定的字符串。

另一方面你可以也可以使用javascript to manipulate SVG images如果你想在客户端处理它。这样,如果客户有指定的字体或不是甚至不会没关系......

+1

这是我在回答我的答案时所考虑的功能......我的记忆力不如以前那么好...... – jsnfwlr 2009-10-30 08:40:51

3

你的标题和实际的帖子似乎说略有不同的东西。我猜你真正要问的是,是否可以确定在您的PHP代码(在呈现网页之前)在网页上呈现的文本的像素宽度。

如果是这样,答案是“否”。所述字体可能在用户的计算机上不可用;他/他可能会使用自定义样式表;使用大字号;等等......

什么你可以做的是确定使用JavaScript 后的页面宽度呈现(当然,你可以做一些其他的一页,也希望没有什么变化,直到当时的)并提交回到PHP。有了一些聪明的AJAX,你甚至可以在同一页面上做到这一点。

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

+1

请参阅我的编辑。 +1的链接,但它不能解决我的目的:( – 2009-10-29 05:45:28

+1

@ ChssPly76 - 我不同意Crimson使用PHP来生成一个图像,这是在服务器端完成的,所以字体肯定可用 – Abinadi 2009-10-29 05:52:20

+0

@Abinadi - Crimson问,在浏览器**中渲染**时,该字符串需要多少像素,而不是他渲染的图像中,或者至少,这是我理解它的方式。 – ChssPly76 2009-10-29 05:57:46

13

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

如果您使用此,它应该工作:

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

    $width = $right - $left; 
+0

似乎Crimson将字符串渲染为图像,但问题在于图像的大小,以便字符串能够正确匹配。这可以用GD库来完成吗?我认为GD没有换行选项。 – Abinadi 2009-10-29 05:56:27

+0

+1 GD似乎很有帮助 – 2009-10-29 06:06:34

+0

phalacee,我无法在GD中找到确定字符串宽度的方法。看起来我必须在图像宽度和高度参数之前调用imagecreate(),然后才能将字符串写入它,从而使练习成为无用的往返行程:( – 2009-10-29 06:25:55

3

使用jQuery,

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

如果你想确定文本字符串的长度,使用PHP的内置的-fonts(例如,如果你正在使用和imagestring()),你可以使用:

imagefontwidth() 


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

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

如果不使用内建的字体,使用imagettfbbox(),像上面提到。

相关问题