2009-10-29 6 views
19

Wenn ich die Schriftgröße (12) und die Schriftfamilie (calibri) kenne, gibt es eine Möglichkeit, die Länge (in Pixeln) zu bestimmen, die eine gegebene Zeichenfolge nach der Wiedergabe benötigt? Ich bin absolut sicher über die Schriftart und die Größe. Gibt es zu diesem Zweck Nachschlagetabellen, um die Länge im PHP-Code selbst zu bestimmen? Ich schreibe ein PHP-Skript, um dynamisch ein SVG-Bild zu erzeugen, das verschiedene Felder enthält, die mit Daten gefüllt sind, die aus einer DB herausgezogen werden. Das Problem ist, dass ich den Text manuell umschließen muss und die Größe der Box vergrößern muss, wenn die Zeichenfolge groß ist.Wie wird die Länge (in Pixel) einer auf einer Webseite gerenderten Zeichenfolge bestimmt?

Dank

Antwort

16

die PHP-Funktion imagettfbbox Verwenden Sie die Größe des Begrenzungsrahmens für die gegebene Zeichenfolge zu erhalten.

Auf der anderen Seite Sie können Verwendung auch javascript to manipulate SVG images falls Sie es auf der Clientseite zu handhaben möchten. Auf diese Weise es nicht einmal eine Rolle, wenn der Kunde die angegebene Schrift hatte oder nicht ...

+1

das war die Funktion, an die ich dachte, als ich meine Antwort gab ... meine Erinnerung ist nicht so gut wie früher ... – jsnfwlr

3

Ihr Titel und tatsächliche Beitrag scheinen etwas andere Dinge zu sagen. Ich schätze, was Sie wirklich fragen ist, ob es möglich ist, die Breite in Pixeln von Text auf einer Webseite in Ihrem PHP-Code gerenderten zu bestimmen (vor dem Rendern der Webseite).

Wenn ja, ist die Antwort "NEIN". Diese Schriftart ist möglicherweise nicht auf dem Computer des Benutzers verfügbar; Es kann ein benutzerdefiniertes Stylesheet angewendet werden. Verwenden Sie große Schriftgrößen; ... etc

Was Du kann tun ist, dass die Breite bestimmt mit Hilfe von Javascript nach der Seite gerendert wird (natürlich kann man tun, dass in einer anderen Seite als auch und hofft nichts ändert bis dahin) und trägt vor, zurück zu PHP. Mit etwas cleverem AJAX-in können Sie das sogar auf der gleichen Seite machen.

Werfen Sie einen Blick auf this question für Details, wie Sie dies in Javascript tun.

+1

Bitte sehen Sie meine Bearbeitung. +1 für den Link, aber es löst nicht meinen Zweck :( –

+1

@ ChssPly76 - Ich stimme nicht zu. Crimson verwendet PHP, um ein Bild zu generieren. Das ist auf der Serverseite getan, so wird die Schriftart definitiv verfügbar sein. – Abinadi

+0

@Abinadi - Crimson fragt, wie viele Pixel diese Zeichenkette aufnehmen wird, wenn sie ** im Browser ** gerendert wird, nicht in dem Bild, das er rendert. Oder zumindest habe ich das so verstanden. – ChssPly76

13

Sie könnten PHP GD verwenden, um die Zeichenfolge als Bild zu rendern und die Größe des resultierenden Bildes zu erhalten.

Wenn Sie diese verwenden, sollte es funktionieren:

list($left,, $right) = imageftbbox(12, 0, "arial.ttf", "Hello World"); 

    $width = $right - $left; 
+0

Es scheint, dass Crimson die Zeichenfolge als Bild rendert, aber die Frage ist, welche Größe, um das Bild so zu machen, dass die Zeichenfolge richtig passt. Kann das mit der GD-Bibliothek gemacht werden? Ich dachte nicht, dass es eine Wortumbruchoption mit GD gibt. – Abinadi

+0

+1 GD erscheint hilfreich –

+0

phalacee, ich bin nicht in der Lage, einen Weg in GD zu finden, um die String-Breite zu bestimmen. Es scheint, dass ich imagecreate() mit Bild Breite und Höhe Parameter aufrufen muss, bevor eine Zeichenfolge geschrieben werden kann, so dass die Übung eine sinnlose Rundreise :( –

3

Verwenden jQuery,

$("text").each(function(){alert(this.innerHTML+" is "+$(this).width()+" pixels.");}); 
2

Wenn Sie die String-Länge des Textes, um zu bestimmen, unter Verwendung von PHP-Build-in

imagefontwidth() 


$text = "Your text here" 
$fontSize = 5; 

$textLength = imagefontwidth($fontSize) * strlen($text); 

wenn Sie die Verwendung imagettfbbox(), wie oben erwähnt nicht verwenden Build-in-Fonts,: -Fonts (zB wenn Sie image() verwenden), können Sie verwenden.

Verwandte Themen