Start · Sprachen · PHP · Referenz · imageftbbox

imageftbbox

Funktion

Berechnet das Begrenzungsrechteck (Bounding Box) eines Textes mithilfe der FreeType-2-Bibliothek, ohne ihn zu rendern.

seit PHP 4.0.7 Kategorie: image

Signatur

imageftbbox(float $size, float $angle, string $font_filename, string $string, array $options = []): array|false

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

Typ
array|false
Beschreibung

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";
}
Breite: 98px Höhe: 20px

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.