Im PHP ist ImageFontwidth () eine Funktion, mit der die Breite eines einzelnen Zeichens in einer integrierten Schriftart verwendet wird, die normalerweise beim Zeichnen von Text auf einem Imagestring () oder imagestringup () verwendet wird. In diesem Artikel werden Dinge und allgemeine Probleme vorgestellt, auf die bei der Verwendung der Funktion im Bildfontwidth () beachtet werden muss, und den Entwicklern dabei helfen, das Layout von Text in Bildern besser zu steuern.
ImageFontwidth (int $ font): int
Der Parameter $ -Krapart hat die Größe der Schriftart und der Wertebereich beträgt 1 bis 5, was die fünf eingebauten Schriftarten in PHP darstellt.
Der Rückgabewert ist die Breite eines einzelnen Zeichens in der Schriftart und das Gerät ist Pixel.
Beispielcode:
<?php
$font = 3; // Wählen Sie eine Schriftgröße aus
$charWidth = imagefontwidth($font);
echo "Font width is: " . $charWidth;
?>
ImageFontwidth () kann nur für fünf in PHP integrierte Schriftarten (1-5) verwendet werden und können nicht für benutzerdefinierte Schriftarten oder TrueType-Schriftarten verwendet werden (Text mit ImageTettftext () ).
Wenn Sie ImagettFText () verwenden, um Text zu rendern, müssen Sie die Funktion von ImagettFBBox () verwenden, um die Textgröße zu erhalten, und nicht die ImageFontwidth () .
Die eingebaute Schriftart ist eine Monospace-Schriftart, und jedes Zeichen hat eine feste Breite, sodass die Verwendung von ImageFontwidth () die feste Breite eines einzelnen Zeichens ist. Wenn der Text Multi-Byte-Zeichen (z. B. Chinesisch) enthält, gilt die einzelnen Breite möglicherweise nicht unbedingt, da die integrierte Schrift Chinesen nicht vollständig unterstützen kann.
Beispiel:
<?php
$font = 4;
$charWidth = imagefontwidth($font);
$text = "Hello";
$textWidth = strlen($text) * $charWidth;
echo "Text width is: " . $textWidth;
?>
Für chinesische Zeichen, da die integrierte Schriftart Multi-Byte-Chinesen nicht unterstützt, wird bei der Berechnung der Länge mit strlen () ein Fehler auftreten, und Sie müssen mb_strlen () verwenden.
Wenn es sich bei dem Text um chinesische oder andere Multibyte -Zeichen handelt, berechnet die Verwendung von Strlen () die Anzahl der Bytes anstelle von Zeichen, was zu einem Fehler der Berechnung der Breite führt.
Es wird empfohlen, beispielsweise mb_strlen () zu verwenden:
<?php
$text = "Chinesischer Test";
$font = 3;
$charWidth = imagefontwidth($font);
$textWidth = mb_strlen($text, 'UTF-8') * $charWidth;
echo "Text width is: " . $textWidth;
?>
Es ist jedoch immer noch wichtig zu beachten, dass die integrierte Schriftart Chinesen nicht richtig anzeigen kann, daher wird empfohlen, ImagettFtext () zu verwenden.
ImageFontwidth () unterstützt nur die Schriftgrößen von 1 bis 5. Außer Reichweite gibt einen Fehler oder ein ungenaues Ergebnis zurück.
Die eingebaute Schriftart kann Chinesen nicht rendern, und die Chinesen werden beim Aufrufen von Imagestring () als verstümmelt oder leer angezeigt. Lösung:
Verwenden Sie die Funktion imageettFtext (), um TTF -Schriftarten zu laden, die Chinesisch unterstützen.
Verwenden Sie ImagettFBBox () , um die Textgrenze zu erhalten, und berechnen Sie die Breite und Höhe.
Beispiel:
<?php
$im = imagecreatetruecolor(200, 50);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 200, 50, $white);
$fontfile = 'm66.net/fonts/simhei.ttf'; // Der Beispielpfad hier ist m66.net Ersatz für Domainname
$text = "Chinesischer Test";
$fontsize = 20;
$bbox = imagettfbbox($fontsize, 0, $fontfile, $text);
$textWidth = $bbox[2] - $bbox[0];
imagettftext($im, $fontsize, 0, 10, 30, $black, $fontfile, $text);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Bei der Berechnung der Breite unter Verwendung von ImageFontwidth () werden Schriftabstand oder spezielle Zeichenbreiten ignoriert, was beim Rendern von Text zu Abweichungen führt. An diesem Punkt können Sie es versuchen:
Vorbereiten Sie die Breite vor und hinterlassen Sie den entsprechenden Rand.
Verwenden Sie genauere Messmethoden (z. B. ImagettFBbox () für TTF -Schriftarten).
Gegenstand | veranschaulichen |
---|---|
Nur eingebaute Schriftarten werden unterstützt | Nicht verfügbar für benutzerdefinierte Schriftarten oder TTF -Schriftarten |
Feste Zeichenbreite | Geeignet für Monospace -Schriftarten, kann die Multibyte -Charakterbreite nicht genau berechnen |
Chinesische Unterstützung begrenzt | Eingebaute Schriftarten unterstützen Chinese nicht, es wird empfohlen, ImagettFtext () zu verwenden. |
Achten Sie auf die Codierung für die Längeberechnung | Chinesen sollten mb_strlen () verwenden |
Im Allgemeinen ist ImageFontwidth () eine einfache Funktion, die für die schnelle Verarbeitung von Breitenberechnungen einfacher englischer Text geeignet ist. Für chinesische oder komplexe Schriftarten wird jedoch empfohlen, eine leistungsstärkere Funktion der TrueType -Schriftverarbeitung zu verwenden.