2010-03-19 2 views
10

Я создаю динамическое изображение, которое создает заголовки на моей странице с помощью PHP-библиотеки GD. Проблема в том, что мне нужна система обертки строк. Это не проблема сама, но сначала мне нужно получить ширину (в пикселях) текущего символа.Получить ширину одного символа из ttf-шрифта в php?

Мне очень интересно, есть ли способ? Или мне нужно вручную указать ширину каждого абзаца?

Мартти Laine

ответ

13

Вы должны сделать 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>"; 

} 
+0

Спасибо за этот быстрый ответ! –

+0

@Martti приветствую вас. Если вы можете использовать его, также рассмотрите ImageMagick: http://www.imagemagick.org/Usage/text/#caption. Он может выполнять перенос слов из коробки и обрабатывать текст TTF намного, намного лучше, но его необходимо установить и доступный на сервере. –

+0

Хорошо, я также проверю это. –

0

Если вы печатаете результаты

$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.

Смежные вопросы