2010-03-19 50 views
10

我正在创建一个动态图像,它使用PHP GD-Library在我的页面上创建标题。问题是,我需要一个包线系统。这本身不是问题,但首先我需要获取当前字符的宽度(以像素为单位)。在php中从ttf-font获取单个字符的宽度?

我对此很好奇,有什么办法吗?或者我需要手动指定每个abc的宽度?

马尔蒂·莱恩

回答

13

你将不得不在每一个字符做imagettfbbox()

未经测试,但应该工作:

$string = "Lorem Ipsum"; 
$size = 20; 
$angle = 0; 
$fontfile = "ARIAL.TTF"; 

$strlen = strlen($string); 
for ($i = 0; $i < $strlen; $i++) 
{ 
    $dimensions = imagettfbbox($size, $angle, $fontfile, $string[$i]); 
    echo "Width of ".$string[$i]." is ".$dimensions[2]."<br>"; 

} 
+0

感谢您的快速回答! – 2010-03-19 20:03:10

+0

@Martti不客气。如果你可以使用它,也可以考虑ImageMagick:http://www.imagemagick.org/Usage/text/#caption它可以开箱即用,很好地处理TTF文本,但需要安装并且在服务器上可访问。 – 2010-03-19 20:27:23

+0

好的,我也会检查一下。 – 2010-03-20 11:18:45

0

如果您打印的

$string = "Lorem Ipsum"; 
$size = 20; 
$angle = 0; 
$fontfile = "./fonts/arial.ttf"; 

$dimensions = imagettfbbox($size, $angle, $fontfile, $string); 
print_r($dimensions); 

结果你可能会得到something`像:

Array 
(
    [0] => -1 
    [1] => 5 
    [2] => 152 
    [3] => 5 
    [4] => 152 
    [5] => -20 
    [6] => -1 
    [7] => -20 
) 

其中每个指标是:

0 lower left corner, X position 
1 lower left corner, Y position 
2 lower right corner, X position 
3 lower right corner, Y position 
4 upper right corner, X position 
5 upper right corner, Y position 
6 upper left corner, X position 
7 upper left corner, Y position 

所以宽度应为指数2 - 索引0我不完全得到负1索引0

这是一个有点奇怪,如果你总结总各字符的字符串中的结果是130不是153.