Aktueller Standort: Startseite> Neueste Artikel> Hinweise beim Rendern von Text in einem Bild mithilfe von ImageFontwidth ()

Hinweise beim Rendern von Text in einem Bild mithilfe von ImageFontwidth ()

M66 2025-06-04

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.


1. Einführung in die Grundnutzung

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;
?>

2. Dinge zu beachten

2.1 gilt nur für integrierte Schriftarten

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 () .

2.2 Die Zeichenbreite ist festgelegt

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.

2.3 Achten Sie bei der Berechnung der Stringlänge auf die Codierung

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.

2.4 Schriftgrößengrenze

ImageFontwidth () unterstützt nur die Schriftgrößen von 1 bis 5. Außer Reichweite gibt einen Fehler oder ein ungenaues Ergebnis zurück.


3.. Häufig gestellte Fragen und Lösungen

3.1 Ausnahme der chinesischen Anzeige

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);
?>

3.2 Fehler bei der Berechnung der Zeichenfolge Breite

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).


4. Zusammenfassung

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.