Signatur
Beschreibung
imageftbbox() ermittelt die Abmessungen, die ein gegebener Text in einer bestimmten Schriftart, Schriftgröße und unter einem bestimmten Winkel einnehmen würde. Die Funktion rendert den Text nicht in ein Bild, sondern liefert lediglich die Koordinaten des umschließenden Rechtecks – ideal zur Vorberechnung von Layoutpositionen.
Der Rückgabewert ist ein Array aus acht Ganzzahlen, die die vier Eckpunkte des Begrenzungsrechtecks in Pixeln beschreiben (jeweils X- und Y-Koordinate). Die Reihenfolge ist: untere linke, untere rechte, obere rechte und obere linke Ecke – jeweils relativ zum Ausgangspunkt des ersten Zeichens.
Typische Anwendungsfälle sind das zentrierte oder rechtsbündige Platzieren von Text auf dynamisch erzeugten Bildern, da man erst die tatsächliche Breite und Höhe des gerenderten Textes kennen muss, bevor man die Zielposition bestimmen kann.
Beachte, dass FreeType-2-Unterstützung bei der PHP-Kompilierung aktiviert sein muss (--with-freetype), andernfalls steht die Funktion nicht zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $size Pflicht | float | Schriftgröße in Punkten (pt). GD1 interpretiert diesen Wert in Pixeln, GD2 hingegen in Punkten. | |
| $angle Pflicht | float | Drehwinkel des Textes in Grad (Grad gegen den Uhrzeigersinn). 0 bedeutet horizontal von links nach rechts. |
|
| $font_filename Pflicht | string | Absoluter oder relativer Pfad zur TrueType-Schriftdatei (.ttf oder .otf). Relative Pfade werden relativ zum aktuellen Arbeitsverzeichnis aufgelöst. |
|
| $string Pflicht | string | Der zu messende Text. Kann UTF-8-kodierte Multibyte-Zeichen enthalten. | |
| $options | array | [] | Optionales assoziatives Array mit zusätzlichen Optionen. Unterstützte Schlüssel: linespacing (float) zur Steuerung des Zeilenabstands. |
Rückgabewert
Bei Erfolg ein Array mit 8 Ganzzahlen, die die Koordinaten der vier Eckpunkte des Begrenzungsrechtecks darstellen:
[0],[1]: X, Y der unteren linken Ecke[2],[3]: X, Y der unteren rechten Ecke[4],[5]: X, Y der oberen rechten Ecke[6],[7]: X, Y der oberen linken Ecke
Bei einem Fehler wird false zurückgegeben.
Beispiele
Textbreite und -höhe ermitteln
<?php
$font = '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf';
$text = 'Hallo Welt!';
$size = 20;
$angle = 0;
$bbox = imageftbbox($size, $angle, $font, $text);
if ($bbox !== false) {
$textWidth = abs($bbox[2] - $bbox[0]);
$textHeight = abs($bbox[7] - $bbox[1]);
echo "Breite: {$textWidth}px\n";
echo "Höhe: {$textHeight}px\n";
} else {
echo "Fehler beim Ermitteln der Bounding Box.\n";
}
Text horizontal zentriert auf einem Bild platzieren
<?php
$imgWidth = 400;
$imgHeight = 100;
$font = '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf';
$text = 'Zentrierter Text';
$fontSize = 24;
// Bounding Box berechnen
$bbox = imageftbbox($fontSize, 0, $font, $text);
$textWidth = abs($bbox[2] - $bbox[0]);
$textHeight = abs($bbox[7] - $bbox[1]);
// Startposition für zentrierte Ausgabe
$x = (int)(($imgWidth - $textWidth) / 2);
$y = (int)(($imgHeight + $textHeight) / 2);
// Bild erstellen und Text rendern
$image = imagecreatetruecolor($imgWidth, $imgHeight);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
imagefttext($image, $fontSize, 0, $x, $y, $black, $font, $text);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
// Wichtig · Fallstricke
Sicherheitshinweis: Der Pfad in $font_filename sollte niemals direkt aus Benutzereingaben übernommen werden, da dies Path-Traversal-Angriffe ermöglichen könnte. Verwende stets eine Whitelist erlaubter Schriftdateien.
Die Funktion ist nahezu identisch mit imagettfbbox(), unterstützt jedoch zusätzlich das $options-Array (z. B. für Zeilenabstand) und basiert explizit auf FreeType 2.
Koordinaten können negativ sein, wenn Zeichen Unterlängen haben oder der Text gedreht wurde. Berechne Breite und Höhe daher immer über abs()-Differenzen.