(PHP 4 >= 4.0.7, PHP 5, PHP 7)

imageftbboxDevolver la caja circundante de un texto usando fuentes mediante FreeType 2


imageftbbox ( float $size , float $angle , string $fontfile , string $text [, array $extrainfo ] ) : array

Esta función calcula y devuelve la caja circundante en píxeles de un texto FreeType.



Tamaño de fuente en puntos.


Ángulo en grados en el que text será medido.


El nombre de un archivo de fuente TrueType (puede ser una URL). Dependiendo de la versión de la biblioteca GD que esté usando PHP, se intentará buscar archivos que no comiencen con '/' añadiendo '.ttf' al nombre de archivo y buscando en una ruta de biblioteca definida de fuentes.


La cadena que va a ser medida.


Posibles índeces de matriz para extrainfo
Clave Tipo Significado
linespacing float Define el espacio entre líneas

Valores devueltos

imageftbbox() devuelve una matriz con 8 elementos que representan cuatro puntos que hacen la caja circundante del texto:

0 esquina inferior izquierda, posición X
1 esquina inferior izquierda, posición Y
2 esquina inferior derecha, posición X
3 esquina inferior derecha, posición Y
4 esquina superior derecha, posición X
5 esquina superior derecha, posición Y
6 esquina superior izquierda, posición X
7 esquina superior izquierda posición Y

Los puntos son relativos a text sin importar el ángulo angle, por lo que "superior izquierda" significa la esquina superior izquierda, viendo el texto horizontalmente.


Ejemplo #1 Ejemplo de imageftbbox()

// Crear una imagen de 300x150
$im imagecreatetruecolor(300150);
$negro imagecolorallocate($im000);
$blanco imagecolorallocate($im255255255);

// Establecer el fondo a blanco

// Ruta de nuestro archivo de fuente
$fuente './arial.ttf';

// Priemero creamos nuestra caja circundante
$bbox imageftbbox(100$fuente'The PHP Documentation Group');

// Estas son nuestras coordenadas para X e Y
$x $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 5;
$y $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

imagefttext($im100$x$y$negro$fuente'The PHP Documentation Group');

// Imprimir al navegador
header('Content-Type: image/png');



Nota: Esta función sólo está disponible si PHP fue compilado con suporte de freetype (--with-freetype-dir=DIR )

add a note add a note

User Contributed Notes 8 notes

15 years ago
imagettfbbox() returns an array with 8 elements representing four points making the bounding box of the text:

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

The points are relative to the text regardless of the angle, so "upper left" means in the top left-hand corner seeing the text horizontally.
sectionthirty1 at yahoo dot com
16 years ago
Here is a handy example I used to center "dynamic text" onto an image. 

Ex. Say you want to center a clients IP Address onto a picture. 


$details = imageftbbox($fontsize, 0, $font, $ip, array("linespacing" => 1));

$xcoord = ($imgwidth - $details[4]) / 2;  // this will return the x coordinate centered to your specific image.  Make sure  you set $imgwidth to the width of the image you are using.     

imagettftext($image, $fontsize, 0, $xcoord, $ycoord, $fontcolor, $font, $ip);
phpimageftbbox at juggernaut dot com dot au
18 years ago
This function can be used to generate right-aligned text. Just work out how wide the text image is and position it accordingly. Example:

$i_width  = 200;
$i_height = 40;

$string = "Hello World!";
$pointsize = 10;
$fontfile = "/usr/local/lib/ttf/Helve.ttf";

$im = imagecreate($i_width, $i_height);
$black = imagecolorallocate ($im, 0, 0, 0);
$white = imagecolorallocate ($im, 255, 255, 255);

$string_size = ImageFtBbox($pointsize, 0, $fontfile, $string, array("linespacing" => 1));
$s_width  = $string_size[4];
$s_height = $string_size[5];

ImageFtText($im, $pointsize, 0, $i_width - $s_width - 1,  0 - $s_height, $white, $fontfile, $string, array("linespacing" => 1));

Header ("Content-type: image/png");
ImagePNG ($im);
ImageDestroy ($im);
pablocorezzola at gmail dot com
3 years ago
//EXAMPLE - Center text

function newText($im, $size, $angle= 0, $x, $y, $color, $font, $text,$align = "left",$border=false,$width=0,$height=0){
    if($align == "center")
        if ($border == true ){
           imagerectangle($im, $x, $y, $x +$width, $y + $height, $color);
        $bbox = imageftbbox($size, 0, $font, $text);

        // Marcamos el ancho y alto
        $s_width  = $bbox[4];
        $s_height = $bbox[5]; 
        $y = $y + ($height-$s_height)/2;
        $x = $x + ($width-$s_width)/2;

    imagettftext($im, $size, $angle, $x, $y, $color, $font, $text);
theo v e -2
14 years ago
ah... the problem between imageftbbox() and imagefttext() lies in the mirroring of the y-axes.
Below you see, for a font-size 16 the boudingboxes of "b", "p" and "bp":
< b: w=9 h=15
< p: w=9 h=16
< bp: w=20 h=20
If drawing "bp" using imagefttext() at y=0, the the top of "bp" indeed is at y=-16, and the bottom of "bp" at y=4. (Plus or minus a pixel here and there, because at y=0 there actually is a vissible pixel.)
ta at NOSPAM dot magicsquare dot info
18 years ago
i've found a work around for this situation

it seems that height is directly proportional to line spacing so you just have to apply the same factor to image height

for example :

$spacing = 0.7;
$params = array("linespacing" => $spacing);

$box = imageftbbox ($size, 0, $font, $text, $params);
$tw=$box[4]-$box[0]; //image width
$th=($box[1]-$box[5])*$spacing; //image height
groomed at users dot sf dot net
16 years ago
ImageFTBBox returns a bounding box, not metrics, as some (most?) of the notes above seem to assume. The 8 values it returns specify the 4 corners of this bounding box. So to properly determine the width and height of a string you need to do:

$bbox = ImageFTBBox(...);
$width = abs($bbox[0]) + abs($bbox[2]); // distance from left to right
$height = abs($bbox[1]) + abs($bbox[5]); // distance from top to bottom
13 years ago
For alignment i used this method:

if($align == "center" || $align == "right")
        $verticaltxtspace = $backwidth - (2 * $posx);       
        $spacepositions = imagettfbbox($size, $angle, "fonts/verdanaz.ttf", " ");        
        $spacepx = $spacepositions[4] - $spacepositions[0];       
        // Split text in lines
        $lines = split("[\r][\n]", $text);       
        for($count = 0; $count < count($lines); $count++)
            $textpositions = imagettfbbox($size, $angle, "fonts/verdanaz.ttf", $lines[$count]);           
            $textpx = $textpositions[2] - $textpositions[0];
            if($align == "right")
                $spaces = ($verticaltxtspace - $textpx) / $spacepx;
            else if($align == "center")
                $spaces = (($verticaltxtspace - $textpx)/2) / $spacepx;
            // Add spaces
            $line = $lines[$count];
            for($i = 0; $i < $spaces; $i++)
                $line = " " . $line;
            $lines[$count] = $line;
        // Create new text of lines
        $text = "";
        for($count = 0; $count < count($lines); $count++)
            $text .= $lines[$count] . "\r\n";
    //    Draw the shadow text on de shadow
    imagettftext($background, $size, $angle, $posx, $posy, $textcolor, "fonts/verdanaz.ttf",  $text);
To Top