(PHP 4, PHP 5, PHP 7)
imagettfbbox — Give the bounding box of a text using TrueType fonts
$size
, float $angle
, string $fontfile
, string $text
) : arrayThis function calculates and returns the bounding box in pixels for a TrueType text.
Note:
imageftbbox() is an extended variant of imagettfbbox() which additionally supports the
extrainfo
.
size
The font size in points.
angle
Angle in degrees in which text
will be measured.
fontfile
The path to the TrueType font you wish to use.
Depending on which version of the GD library PHP is using, when
fontfile
does not begin with a leading
/
then .ttf
will be appended
to the filename and the library will attempt to search for that
filename along a library-defined font path.
When using versions of the GD library lower than 2.0.18, a space
character,
rather than a semicolon, was used as the 'path separator' for different font files.
Unintentional use of this feature will result in the warning message:
Warning: Could not find/open font
. For these affected versions, the
only solution is moving the font to a path which does not contain spaces.
In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.
<?php
// Set the environment variable for GD
putenv('GDFONTPATH=' . realpath('.'));
// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont';
?>
Note:
Note that open_basedir does not apply to
fontfile
.
text
The string to be measured.
imagettfbbox() returns an array with 8
elements representing four points making the bounding box of the
text on success and FALSE
on error.
key | contents |
---|---|
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.
Example #1 imagettfbbox() example
<?php
// Create a 300x150 image
$im = imagecreatetruecolor(300, 150);
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
// Set the background to be white
imagefilledrectangle($im, 0, 0, 299, 299, $white);
// Path to our font file
$font = './arial.ttf';
// First we create our bounding box for the first text
$bbox = imagettfbbox(10, 45, $font, 'Powered by PHP ' . phpversion());
// This is our cordinates for X and Y
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;
// Write it
imagettftext($im, 10, 45, $x, $y, $black, $font, 'Powered by PHP ' . phpversion());
// Create the next bounding box for the second text
$bbox = imagettfbbox(10, 45, $font, 'and Zend Engine ' . zend_version());
// Set the cordinates so its next to the first text
$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) + 10;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;
// Write it
imagettftext($im, 10, 45, $x, $y, $black, $font, 'and Zend Engine ' . zend_version());
// Output to browser
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Note: This function is only available if PHP is compiled with freetype support (--with-freetype-dir=DIR)