Bei der Verarbeitung von Bildtext in PHP ist es häufig erforderlich, die Breite des Textes für eine einfache Layout und Positionierung zu erhalten. Traditionell verwenden viele Entwickler die Funktion von ImageFontwidth (), um die Zeichenbreite der integrierten Schriftart zu erhalten. Da ImageFontwidth () jedoch nur integrierte Schriftarten (und feste Größe) verarbeiten kann, ist die Genauigkeit und Flexibilität begrenzt, insbesondere bei Verwendung von TrueType-Schriftarten.
In diesem Artikel wird imageFontwidth () durch die Funktion von ImageFontwidth () ersetzt, um eine genauere Messung der Textbreite zu erzielen, insbesondere für Szenarien, in denen TTF -Schriftarten frei verwendet werden.
Die ImageFontwidth () -Funktion akzeptiert nur die Größe der integrierten Schrift (1 bis 5) und gibt die Breite der Zeichen in der angegebenen Schriftart (in Pixel) zurück. Diese Funktion kann jedoch nicht die Gesamtbreite einer Zeichenfolge messen, noch kann sie benutzerdefinierte Schriftgrößen und Schriftdateien unterstützen.
<?php
// Traditionelle Verwendung,Holen Sie sich die eingebaute Schriftgröße als3Die Breite eines Charakters
$charWidth = imagefontwidth(3);
echo "Charakterbreite: $charWidth";
?>
Diese Methode erhält nicht genau die Breite einer Zeichenfolge oder benutzerdefinierten Schriftart.
ImagettFBbox () ist eine Funktion, die von PHP für TrueType -Schriftarten bereitgestellt wird. Es gibt ein Array zurück, das die Grenzbox -Koordinaten des angegebenen Textes auf dem Bild darstellt. Durch die Berechnung dieser Koordinaten können die Breite und Höhe des Textes erhalten werden.
array imagettfbbox(float $size, float $angle, string $fontfile, string $text)
$ Größe : Schriftgröße
$ Angle : Winkel (normalerweise 0)
$ fontFile : font Dateipfad (.ttf)
$ Text : Text, der gemessen werden muss
Gibt ein Array von 8 Ganzzahlen zurück, die die vier Scheitelpunkte des Textnichtsboxs darstellen:
0 => lower left X
1 => lower left Y
2 => lower right X
3 => lower right Y
4 => upper right X
5 => upper right Y
6 => upper left X
7 => upper left Y
Das folgende Beispiel zeigt, wie ImagettFBBox () anstelle von ImageFontwidth () verwendet wird, um die Textbreite genau zu messen.
<?php
// Charakterinhalt
$text = "Hello, Welt!";
// Schriftgröße
$fontSize = 16;
// Winkel
$angle = 0;
// Schriftart Dateipfad(Angenommen, die Schriftdatei befindet sich auf dem Server)
$fontFile = 'm66.net/fonts/arial.ttf';
// Holen Sie sich das Array des Textes Bockening -Box
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);
// Breite berechnen
// Untere rechte EckeX - Untere linke EckeX
$textWidth = abs($bbox[2] - $bbox[0]);
echo "Die Textbreite ist: " . $textWidth . " Pixel";
?>
Angenommen, wir müssen Text in einer Leinwand mit einer Breite von 300 PX zeichnen. Wir können zuerst ImagettFBBox () verwenden, um die Textbreite zu erhalten, und dann den Startpunkt zu berechnen:
<?php
// Erstellen Sie eine Leinwand
$imgWidth = 300;
$imgHeight = 50;
$image = imagecreatetruecolor($imgWidth, $imgHeight);
// Farbdefinition
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
// Füllen Sie den Hintergrund
imagefill($image, 0, 0, $bgColor);
// Text- und Schriftartparameter
$text = "Hello, Welt!";
$fontSize = 20;
$angle = 0;
$fontFile = 'm66.net/fonts/arial.ttf';
// Holen Sie sich eine Textbreite
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);
$textWidth = abs($bbox[2] - $bbox[0]);
$textHeight = abs($bbox[5] - $bbox[1]);
// berechnenXAusgangspunkt der Welle,Die Mittelstufe erreichen
$x = ($imgWidth - $textWidth) / 2;
// berechnenYAusgangspunkt der Welle,Vertikale Zentrierung realisieren(Beachten imagettftext Basierend auf der Basislinie)
$y = ($imgHeight + $textHeight) / 2;
// Text zeichnen
imagettftext($image, $fontSize, $angle, $x, $y, $textColor, $fontFile, $text);
// Ausgabe Bild
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
ImageFontwidth () ist nur für integrierte Schriftarten geeignet und verfügt über einfache Funktionen.
ImagettFBBox () kann die Textgrenze jeder TTF -Schrift genau erhalten und die Textbreite genauer messen.
Durch die Verwendung von ImagettFBBox () kann die Anforderungen an die Positionierung und Typografie flexiblerer Text erfolgen, insbesondere für benutzerdefinierte Schriftarten und komplexe Text.
In den in diesem Artikel eingeführten Beispiele können Sie imageFontwidth () durch ImagettFbBox () ersetzen, um die Genauigkeit und Flexibilität der Bildwortverarbeitung zu verbessern.