2012-09-09 13 views
7

¿Podría explicar qué significa exactamente el valor de retorno de imagettfbbox()? The manual says:¿Cómo funciona "imagettfbbox()" en PHP?

imagettfbbox() devuelve una matriz con 8 elementos que representan cuatro puntos que el cuadro delimitador del texto en el éxito y FALSE en error. [... Tabla de puntos aquí ...] Los puntos son relativos al texto, independientemente del ángulo, por lo que "superior izquierda" significa en la esquina superior izquierda ver el texto horizontalmente.

Pero no me pareció muy claro. Por ejemplo, el valor de retorno:

array(-1, 1, 61, 1, 61, -96, -1, -96) 

significa los siguientes puntos:

(-1, -96) ------ (61, -96) 
    |    | 
    |    | 
    |    | 
    |    | 
    |    | 
    |    | 
(-1, 1) -------- (61, 1)    

¿Cómo debo interpretar?

¿Por qué hay valores negativos?

+0

¿qué parámetros pasaste a la función? – FilmJ

+0

simplemente véalo como una cuadrícula cartesiana –

Respuesta

1

El siguiente recurso explica esto: http://www.tuxradar.com/practicalphp/11/2/6

sólo tiene que utilizar abs(). Esto es del recurso anterior: "[la función] devuelve sus valores de la esquina inferior izquierda de la línea de base de la cadena de texto, no de la esquina inferior izquierda absoluta. La línea de base de una letra es donde se ubicaría si estuvieras escritura a mano en papel rayado"

+2

La página vinculada utiliza incorrectamente 'abs' en los valores de coordenadas individuales en lugar de * después * de hacer cálculos matemáticos en ellos. Hacer eso va a generar desajustes, – Charles

9

debería echar un vistazo a la comment by "marclaz" on the imagettfbbox manual page:

Tenga en cuenta que a medida que imagettfbbox y funciones imagettftext devuelven una tabla de coordenadas que podría ser el cuidado números negativos, hay que tomada con cálculos de altura y ancho.

La forma rigth de hacerlo es utilizar la función abs():

para un texto horizontal:

$box = @imageTTFBbox($size,0,$font,$text); $width = abs($box[4] - 
$box[0]); $height = abs($box[5] - $box[1]); 

A continuación, para centrar el texto en el ($ x, $ y) la posición de la código debe ser como que:

$x -= $width/2; $y += $heigth/2; 

imageTTFText($img,$size,0,$x,$y,$color,$font,$text); 

esto porque (0,0) origen de la página es la esquina superior izquierda y la página (0,0) texto origen es inferior izquierdo de texto legible c orner.