In PHP stoßen Sie beim Umgang mit Bildtext -Typen häufig auf das Problem mehrerer Textzeilen ausgerichtet. Mit der Funktion ImageFontwidth () in der GD -Bibliothek können Sie die Zeichenbreite der angegebenen Schriftart problemlos erhalten, wodurch ein genaueres Textlayout und eine genauere Ausrichtung erzielt werden. In diesem Artikel wird detailliert eingeführt, wie die Funktion imageFontwidth () verwendet wird, um die Breite mehrerer Textzeilen automatisch zu berechnen, um das ordentliche Textlayout zu unterstützen.
ImageFontwidth () ist eine Funktion der GD-Bibliothek, um die Breite jedes Zeichens in einer angegebenen integrierten Schriftart in Pixel zu erhalten. Der Funktionsprototyp lautet wie folgt:
int imagefontwidth(int $font);
Der Parameter $ -Tramm ist die Schriftgröße, und der Wertebereich beträgt normalerweise 1 bis 5, was den fünf in GD eingebauten Schriftgrößen entspricht.
Die Funktion gibt die Breite jedes Zeichens in der Schrift zurück.
Durch diese Funktion können wir die Anzahl der Pixel kennen, die von jedem Zeichen im Text besetzt sind, wodurch die Breite des gesamten Textes basierend auf der Länge der Zeichenfolge berechnet wird.
Angenommen, Sie möchten mehrere Textzeilen auf das Bild zeichnen und die Breite jeder Zeile zentriert oder links ausgerichtet sind. Mehrere Textzeilen haben häufig unterschiedliche Längen und berechnen die Breite der Zeichenfolge direkt und zeichnen sie, was zu einem ungleichmäßigen Layout führen kann, insbesondere bei Verwendung von Monospace -Schriftarten.
Die Lösung besteht darin, zuerst ImageFontwidth () zu verwenden, um die Breite eines einzelnen Zeichens zu berechnen und dann die Breite jeder Zeile basierend auf der Länge der Zeichenfolge zu berechnen, um die Startpunktkoordinate des Textes zu bestimmen und eine automatische Ausrichtung zu erreichen.
Der folgende Beispielcode zeigt, wie die GD -Bibliothek von PHP in Kombination mit ImageFontwidth () verwendet wird, um eine zentrierte Ausrichtung des Multiline -Textes zu erreichen:
<?php
// Erstellen Sie ein leeres Bild
$width = 400;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// Stellen Sie die Hintergrundfarbe und die Textfarbe fest
$bgColor = imagecolorallocate($image, 255, 255, 255); // Weißer Hintergrund
$textColor = imagecolorallocate($image, 0, 0, 0); // Schwarzer Text
// Füllen Sie den Hintergrund
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// Mehrere Textzeilen zu zeichnen
$textLines = [
"Dies ist die erste Textzeile",
"Die zweite Textzeile ist etwas länger",
"Die dritte Zeile"
];
// Wählen Sie eine Schriftgröße aus
$font = 5; // GDEingebaute Schriftarten,1-5zwischen
// Berechnen Sie Schriftbreite und Höhe
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);
// Erstes ZeichnungsstartpunktYkoordinieren
$startY = 20;
// Durch jede Textzeile durchführen,Berechnen Sie die Breite und zeichnen Sie in der Mitte
foreach ($textLines as $line) {
$lineLength = strlen($line); // Beachten:Hier verwendetstrlenGeeignet für reines Englisch,Wenn Sie Chinesen haben, verwenden Sie bittemb_strlenUnd stellen Sie sicher, dass die Charaktercodierung ist
$lineWidth = $fontWidth * $lineLength;
// berechnenXkoordinieren,Ausrichtung des Zentrums
$x = ($width - $lineWidth) / 2;
// Text zeichnen
imagestring($image, $font, $x, $startY, $line, $textColor);
// Nächste ZeileYkoordinieren
$startY += $fontHeight + 10; // Zeilenabstand10Pixel
}
// Ausgabebild
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
Berechnen Sie die aktuelle Zeilentextbreite durch ImageFontwidth () und strlen () ;
Verwenden Sie die Bildbreite, um die Textbreite zu subtrahieren und sie durch 2 zu teilen, um die X -Koordinate im Zentrum zu berechnen.
Zeichnen Sie mehrere Textzeilen nacheinander und passen Sie die Y -Koordinate an, um eine Linienverletzungseffekte zu erzielen.
Achten Sie auf die Berechnung der chinesischen Saitenbreite. Strlen () zählt die Anzahl der Bytes, was zu Berechnungsfehlern führen kann. Es wird empfohlen, mb_strlen () und eine angemessene Zeichenkodierung zu kombinieren.
ImageFontwidth () kann nur die Breite eines einzelnen Zeichens erhalten, aber chinesische Zeichen sind normalerweise Multibyten. Um die Genauigkeit zu gewährleisten, ist es am besten, mb_strlen () zu verwenden:
$lineLength = mb_strlen($line, 'UTF-8');
Und bestätigen Sie, dass die PHP-Datei und die Betriebsumgebung die UTF-8-Codierung unterstützen.
Die ImageFontwidth () -Funktion ist ein einfaches, aber sehr praktisches Werkzeug in der PHP -GD -Bibliothek. Es kann Entwicklern helfen, Multi-Line-Textbreiten automatisch zu berechnen und ein vernünftigeres Textlayout und eine angemessenere Ausrichtung zu erreichen. Durch die Kombination von Stringlängen zur Berechnung der Pixelbreite, die von jeder Textlinie besetzt ist, ist es einfach, die Zentrierung oder andere Ausrichtung einzugeben, wodurch die Komplexität der Bildwortverarbeitung erheblich vereinfacht wird.