从 php 中的 ttf-font 获取单个字符的宽度?
Posted
技术标签:
【中文标题】从 php 中的 ttf-font 获取单个字符的宽度?【英文标题】:Get width of a single character from ttf-font in php? 【发布时间】:2011-01-29 15:02:21 【问题描述】:我正在创建一个动态图像,它使用 php GD 库在我的页面上创建标题。问题是,我需要一个换行系统。这本身不是问题,但首先我需要获取当前字符的宽度(以像素为单位)。
我很好奇这个,有什么办法吗?还是我需要手动指定每个 abc 的宽度?
玛蒂莱恩
【问题讨论】:
【参考方案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 循环中<=
应该是 <
:)
您需要考虑使用字符串的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,这有点奇怪。
【讨论】:
以上是关于从 php 中的 ttf-font 获取单个字符的宽度?的主要内容,如果未能解决你的问题,请参考以下文章
PHP CLI:如何从 TTY 读取单个字符的输入(无需等待回车键)?
如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?