我正在创建一个动态图像,它使用PHP GD-Library在我的页面上创建标题。问题是,我需要一个包线系统。这本身不是问题,但首先我需要获取当前字符的宽度(以像素为单位)。在php中从ttf-font获取单个字符的宽度?
我对此很好奇,有什么办法吗?或者我需要手动指定每个abc的宽度?
马尔蒂·莱恩
我正在创建一个动态图像,它使用PHP GD-Library在我的页面上创建标题。问题是,我需要一个包线系统。这本身不是问题,但首先我需要获取当前字符的宽度(以像素为单位)。在php中从ttf-font获取单个字符的宽度?
我对此很好奇,有什么办法吗?或者我需要手动指定每个abc的宽度?
马尔蒂·莱恩
你将不得不在每一个字符做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>";
}
如果您打印的
$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.
感谢您的快速回答! – 2010-03-19 20:03:10
@Martti不客气。如果你可以使用它,也可以考虑ImageMagick:http://www.imagemagick.org/Usage/text/#caption它可以开箱即用,很好地处理TTF文本,但需要安装并且在服务器上可访问。 – 2010-03-19 20:27:23
好的,我也会检查一下。 – 2010-03-20 11:18:45