2010-03-19 10 views
10

Sto creando un'immagine dinamica, che crea intestazioni sulla mia pagina utilizzando la libreria GD di PHP. Il problema è che ho bisogno di un sistema di avvolgimento della linea. Non è un problema in sé, ma prima devo ottenere la larghezza (in pixel) del carattere corrente.Ottieni la larghezza di un singolo carattere da ttf-font in php?

Sono piuttosto curioso di questo, c'è qualche modo? O devo specificare manualmente la larghezza di ogni abc?

Martti Laine

risposta

13

Si dovrebbe fare un imagettfbbox() su ogni singolo carattere.

testato ma dovrebbe funzionare:

$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

Grazie per questa risposta veloce! –

+0

@Martti sei il benvenuto. Se puoi usarlo, considera anche ImageMagick: http://www.imagemagick.org/Usage/text/#caption Si può fare parola a capo automatico e gestisce il testo TTF molto, molto meglio, ma deve essere installato e accessibile sul server. –

+0

Ok, controllerò anche io. –

0

Se si stampa i risultati del

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

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

si potrebbe ottenere something` come:

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

dove ogni indice è:

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 

Così la larghezza dovrebbe essere indice 2 - indice 0. I dont abbastanza ottenere il meno 1 per l'indice 0.

E 'un po' strano che se si somma il totale di ogni carattere nella stringa di risultati è 130 non 153.

Problemi correlati