2009-10-29 12 views
19

Si conozco el tamaño de fuente (12) y la familia de fuentes (calibri), ¿hay alguna manera de determinar la longitud (en píxeles) que tomará una cadena determinada después de que se procesará? Estoy absolutamente seguro sobre la fuente y el tamaño. ¿Hay alguna tabla de búsqueda para este propósito para determinar la longitud en el código PHP en sí? Estoy escribiendo un script PHP para generar dinámicamente una imagen SVG que contiene varios cuadros llenos de datos extraídos de un DB. El problema es que tengo que ajustar manualmente el texto y aumentar el tamaño del cuadro si la cadena es grande.¿Cómo se determina la longitud (en píxeles) de una cadena que se procesa en una página web?

Gracias

Respuesta

16

utilizar la función de PHP imagettfbbox para obtener el tamaño del cuadro delimitador de la cadena dada.

Por otro lado, usted puede utilice también javascript to manipulate SVG images en caso de que desee manejarlo en el lado del cliente. De esa manera ni siquiera importa si el cliente tenía la fuente especificada o no ...

+1

que era la función yo estaba pensando en cuando di mi respuesta ... mi memoria no es tan bueno como lo que solía ser ... – jsnfwlr

3

Su título y publicación actual parecen decir cosas ligeramente diferentes. Supongo que lo que realmente está preguntando es si es posible determinar el ancho en píxeles del texto procesado en una página web en su código PHP (antes de que se muestre la página web).

Si es así, la respuesta es "NO". Dicha fuente puede no estar disponible en la computadora del usuario; él/ella puede tener una hoja de estilo personalizada aplicada; use tamaños de letra grandes; etc ...

Lo que puede hacer es determinar que la anchura usando javascript después de la página se representa (obviamente, se puede hacer eso en alguna otra página, así y espero que nada cambia hasta entonces), y lo presentarán de vuelta a PHP. Con algunos AJAX-ing inteligentes, incluso puedes hacer esto en la misma página.

Eche un vistazo a this question para detalles sobre cómo hacer esto en javascript.

+1

Por favor, vea mi edición. +1 para el enlace pero no resuelve mi propósito :( –

+1

@ ChssPly76 - No estoy de acuerdo Crimson está usando PHP para generar una imagen. Eso se hace en el servidor, por lo que la fuente estará definitivamente disponible. – Abinadi

+0

@Abinadi - Crimson está preguntando cuántos píxeles tomará esa cadena cuando se represente ** en el navegador **, no en la imagen que está renderizando. O, al menos, así lo entendí. – ChssPly76

13

Puede usar PHP GD para representar la cadena como una imagen y obtener el tamaño de la imagen resultante.

Si utiliza esto, debería funcionar:

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

    $width = $right - $left; 
+0

Parece que Crimson está renderizando la cadena como una imagen, pero la pregunta es qué tamaño debe hacer la imagen para que la cadena encaje correctamente. ¿Se puede hacer eso con la biblioteca de GD? No creía que hubiera una opción de ajuste de palabras con GD. – Abinadi

+0

1 GD parece útil –

+0

phalacee, no soy capaz de encontrar una manera de GD para determinar el ancho de cuerdas. Parece que debo llamar imagecreate() con el ancho de la imagen y de la altura params antes de una cadena se puede escribir en él con lo que el ejercicio de ida y vuelta inútil :( –

3

Uso de jQuery,

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

Si desea determinar la longitud de cadena de texto, el uso de PHP Build-A -Fuentes (por ejemplo, si está utilizando imagestring()), se puede utilizar:

imagefontwidth() 


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

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

Si no utiliza el Build-A-Fuentes, imagettfbbox uso(), como se mencionó anteriormente.

Cuestiones relacionadas