Получить ширину одного символа из ttf-шрифта в php?

Я создаю динамическое изображение, которое создает заголовки на моей странице с помощью 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>";

 }

Ответ 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. Я не получаю минус 1 для индекса 0.

Немного странно, что если вы суммируете общее количество всех char в строке, результат равен 130 не 153.