Signatur
Beschreibung
imagettfbbox() ermittelt die genauen Abmessungen des Rechtecks, das einen mit TrueType-Schriftart gesetzten Text umschließt. Die Funktion gibt acht Koordinatenwerte zurück, die die vier Ecken des Bounding-Box-Polygons beschreiben. Dabei wird der Text nicht in ein Bild gezeichnet – die Funktion dient rein zur Vorabberechnung.
Typischer Einsatz ist die Vorberechnung der Textgröße, um z. B. ein Bild exakt auf den Text anzupassen, Text zentriert oder rechtsbündig auszurichten oder einen farbigen Hintergrundrahmen hinter dem Text zu zeichnen. Das Ergebnis hängt von Schriftgröße, Schriftart-Datei, Drehwinkel und dem eigentlichen Text ab.
Das zurückgegebene Array enthält 8 Werte (Indizes 0–7), die paarweise x- und y-Koordinaten der vier Ecken der Bounding Box bilden: unten-links, unten-rechts, oben-rechts und oben-links. Die Koordinaten beziehen sich auf den Basislinen-Ursprung des Textes (nicht auf die obere linke Ecke des Bildes).
Ab PHP 8.0 kann der optionale Parameter options übergeben werden, um erweiterte FreeType-Optionen (z. B. linespacing) zu steuern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $size Pflicht | float | Schriftgröße in Punkten (typischerweise DPI-basiert). Vor PHP 8.0 war dies ein Integer-Wert in Pixeln, ab PHP 8.0 ein Float in Punkten. | |
| $angle Pflicht | float | Drehwinkel des Textes in Grad (Grad im Uhrzeigersinn). 0 bedeutet horizontaler Text von links nach rechts. |
|
| $font_filename Pflicht | string | Pfad zur TrueType-Schriftartdatei (.ttf oder .otf). Relative Pfade werden relativ zu DOCUMENT_ROOT aufgelöst, es empfiehlt sich jedoch die Verwendung absoluter Pfade. |
|
| $string Pflicht | string | Der zu messende Text. Unterstützt UTF-8-kodierte Zeichenketten. | |
| $options | array | [] | Assoziatives Array mit erweiterten Optionen, z. B. ['linespacing' => 1.5]. Seit PHP 8.0 verfügbar. |
Rückgabewert
Bei Erfolg ein Array mit 8 Integerwerten, die die vier Ecken der Bounding Box definieren:
[0],[1]: x, y — untere linke Ecke[2],[3]: x, y — untere rechte Ecke[4],[5]: x, y — obere rechte Ecke[6],[7]: x, y — obere linke Ecke
Die Koordinaten sind relativ zum Textbasispunkt. Bei einem gedrehten Text können negative Werte vorkommen. Gibt false zurück, wenn die Schriftdatei nicht geladen werden kann oder ein anderer Fehler auftritt.
Beispiele
Text im Bild horizontal zentrieren
<?php
$text = 'Hallo Welt';
$fontFile = '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf';
$fontSize = 24;
$imgWidth = 400;
$imgHeight = 100;
// Bounding Box vorab berechnen
$bbox = imagettfbbox($fontSize, 0, $fontFile, $text);
if ($bbox === false) {
die('Schriftart konnte nicht geladen werden.');
}
$textWidth = $bbox[2] - $bbox[0]; // Breite
$textHeight = $bbox[1] - $bbox[7]; // Höhe
// Startposition für Zentrierung berechnen
$x = (int)(($imgWidth - $textWidth) / 2);
$y = (int)(($imgHeight + $textHeight) / 2);
// Bild erzeugen und Text schreiben
$image = imagecreatetruecolor($imgWidth, $imgHeight);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
imagettftext($image, $fontSize, 0, $x, $y, $black, $fontFile, $text);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
Farbigen Hintergrundbalken hinter Text zeichnen
<?php
$text = 'Wichtige Meldung';
$fontFile = '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf';
$fontSize = 20;
$padding = 8;
$bbox = imagettfbbox($fontSize, 0, $fontFile, $text);
if ($bbox === false) {
die('Schriftart nicht gefunden.');
}
$textWidth = abs($bbox[2] - $bbox[0]);
$textHeight = abs($bbox[7] - $bbox[1]);
$imgW = $textWidth + 2 * $padding;
$imgH = $textHeight + 2 * $padding;
$img = imagecreatetruecolor($imgW, $imgH);
$bgColor = imagecolorallocate($img, 220, 50, 50); // rot
$fgColor = imagecolorallocate($img, 255, 255, 255); // weiß
imagefill($img, 0, 0, $bgColor);
// Baseline-y berücksichtigen
$yPos = $padding + $textHeight + $bbox[1];
imagettftext($img, $fontSize, 0, $padding, $yPos, $fgColor, $fontFile, $text);
header('Content-Type: image/png');
imagepng($img);
imagedestroy($img);
// Wichtig · Fallstricke
Koordinaten-Ursprung: Die zurückgegebenen Koordinaten beziehen sich auf den Textbasispunkt (Baseline-Ursprung), nicht auf die obere linke Ecke des Bildes. Dies führt häufig zu Verwirrung: y-Koordinaten können negativ sein (Zeichenoberkante liegt über der Baseline).
Schriftpfad: Unter Windows kann alternativ der Schriftname (z. B. 'Arial') ohne Pfad übergeben werden, wenn die Schrift im Systemschriftverzeichnis liegt. Für Portabilität empfiehlt sich jedoch immer ein absoluter Pfad.
GD-Erweiterung: Die Funktion benötigt die PHP-GD-Erweiterung mit aktivierter FreeType-Unterstützung. Ohne FreeType steht imagettfbbox() nicht zur Verfügung.
Mehrzeiliger Text: Die Funktion verarbeitet keinen automatischen Zeilenumbruch. Für mehrzeiligen Text muss jede Zeile einzeln vermessen werden.