2010-03-19 12 views
10

Tworzę obraz dynamiczny, który tworzy nagłówki na mojej stronie przy użyciu biblioteki GD PHP. Problem polega na tym, że potrzebuję systemu owijania liniami. To nie jest sam problem, ale najpierw muszę uzyskać szerokość (w pikselach) bieżącego znaku.Uzyskaj szerokość pojedynczego znaku z ttf-font w php?

Jestem bardzo ciekawy, czy istnieje jakiś sposób? Czy muszę ręcznie określić szerokość każdego abc?

Martti Laine

Odpowiedz

13

Trzeba by zrobić imagettfbbox() każdego pojedynczego znaku.

Nietestowane ale powinno działać:

$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

Dzięki za szybką odpowiedź! –

+0

@Martti nie ma za co. Jeśli możesz go użyć, rozważ także ImageMagick: http://www.imagemagick.org/Usage/text/#caption Potrafi zrobić zawijanie po wyjęciu z pudełka i obsługuje tekst TTF o wiele, dużo lepiej, ale musi być zainstalowany i dostępne na serwerze. –

+0

Okay, też to sprawdzę. –

0

przypadku drukowania wyników

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

$dimensions = imagettfbbox($size, $angle, $fontfile, $string); 
print_r($dimensions); 

można dostać something` jak:

Array 
(
    [0] => -1 
    [1] => 5 
    [2] => 152 
    [3] => 5 
    [4] => 152 
    [5] => -20 
    [6] => -1 
    [7] => -20 
) 

gdzie każdy indeks jest:

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 

Więc szerokość powinna być indeks 2 - indeks 0. I dont dość dostać minus 1 do indeksu 0.

To trochę dziwne, że jeśli zsumować łącznie każdego char w ciągu wyniki są 130 nie 153.

Powiązane problemy