【问题标题】:Get width of a single character from ttf-font in php?从 php 中的 ttf-font 获取单个字符的宽度?
【发布时间】:2011-01-29 15:02:21
【问题描述】:

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

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

玛蒂莱恩

【问题讨论】:

    标签: php image fonts gd width


    【解决方案1】:

    您必须在每个字符上添加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>";
    
     }
    

    【讨论】:

    • @Martti 不客气。如果可以使用,还可以考虑 ImageMagick:imagemagick.org/Usage/text/#caption 它可以开箱即用地自动换行,并且可以更好地处理 TTF 文本,但需要在服务器上安装和访问。
    • 好的,我也去看看。
    • 实际上有一个小错误,在你的 for 循环中 &lt;= 应该是 &lt; :)
    • 您需要考虑使用字符串的0 索引。 strlen($string) - 1
    【解决方案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,这有点奇怪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2012-03-06
      • 2011-09-24
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2016-04-08
      相关资源
      最近更新 更多