Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中从ttf字体获取单个字符的宽度?_Php_Image_Fonts_Gd_Width - Fatal编程技术网

在php中从ttf字体获取单个字符的宽度?

在php中从ttf字体获取单个字符的宽度?,php,image,fonts,gd,width,Php,Image,Fonts,Gd,Width,我正在创建一个动态图像,它使用PHPs GD库在我的页面上创建标题。问题是,我需要一个绕线系统。这本身不是问题,但首先我需要得到当前字符的宽度(以像素为单位) 我很好奇,有什么办法吗?还是需要手动指定每个abc的宽度 玛蒂·莱恩你必须对每个角色都做一个测试 未经测试但应有效: $string = "Lorem Ipsum"; $size = 20; $angle = 0; $fontfile = "ARIAL.TTF"; $strlen = strlen($string); for ($i =

我正在创建一个动态图像,它使用PHPs GD库在我的页面上创建标题。问题是,我需要一个绕线系统。这本身不是问题,但首先我需要得到当前字符的宽度(以像素为单位)

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

玛蒂·莱恩

你必须对每个角色都做一个测试

未经测试但应有效:

$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=“ARIAL.TTF”;
$strlen=strlen($string);
对于($i=0;$i<$strlen;$i++)
{
$dimensions=imagettfbbox($size、$angle、$fontfile、$string[$i]);
echo“..$string[$i]的宽度”是“$dimensions[2]”;
}

如果您打印

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

$dimensions = imagettfbbox($size, $angle, $fontfile, $string); 
print_r($dimensions);
你可能会得到这样的结果:

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。我没有得到索引0的-1


有点奇怪,如果你把字符串中每个字符的总数加起来,结果是130而不是153。

@Martti不客气。如果你可以使用它,也可以考虑IMAGEMGEK:它可以在Word中完成Word包,并且可以很好地处理TTF文本,但是需要在服务器上安装和访问。好的,我也检查一下。实际上有一个小错误,在for for循环中,<>代码>您需要考虑“<代码> 0 < /Cord>用字符串索引。”代码>字符串($string)-1