2010-03-19 7 views
10

Ich erstelle ein dynamisches Bild, das mit PHPs GD-Bibliothek Header auf meiner Seite erstellt. Das Problem ist, dass ich ein Zeilenumbruch-System brauche. Es ist kein Problem selbst, aber zuerst muss ich die Breite (in Pixeln) des aktuellen Zeichens ermitteln.Get Breite eines einzelnen Zeichens von TTF-Schriftart in PHP?

Ich bin ziemlich neugierig, gibt es einen Weg? Oder muss ich die Breite jeder abc manuell angeben?

Martti Laine

Antwort

13

Sie würden eine imagettfbbox() auf jeden einzelnen Charakter zu tun.

Ungeprüfte, sollte aber funktionieren:

$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

Danke für diese schnelle Antwort! –

+0

@Martti du bist willkommen. Wenn Sie es verwenden können, betrachten Sie auch ImageMagick: http://www.imagemagick.org/Usage/text/#caption Es kann Word-out-of-the-box-Wrap und TTF-Text viel, viel besser umgehen, aber muss installiert werden und zugänglich auf dem Server. –

+0

Okay, ich überprüfe das auch. –

0

Wenn Sie die Ergebnisse von

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

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

drucken könnten Sie something` wie erhalten:

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

wo jeder Index ist:

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 

So sollte die Breite Index 2 sein - Index 0. ich ganz die minus 1 für den Index nicht bekommen 0.

Es ist ein wenig seltsam, dass, wenn Sie die Summe der einzelnen Zeichen im String ergibt die Summe der Ergebnisse ist 130 nicht 153.

Verwandte Themen