Aktueller Standort: Startseite> Neueste Artikel> So debuggen Sie ImageFontwidth () eine Breite zurück, die den Erwartungen nicht entspricht

So debuggen Sie ImageFontwidth () eine Breite zurück, die den Erwartungen nicht entspricht

M66 2025-05-24

In der GD der PHP-Bildverarbeitungsbibliothek wird die Funktion imageFontwidth () verwendet, um die einzelnen Zeichenbreite einer angegebenen integrierten Schriftart zu erhalten. Seine typische Verwendung besteht darin, die Schriftnummer (1-5) zu übergeben und dann die Breite (Anzahl der Pixel) eines Zeichens der Schriftart zurückzugeben. In der tatsächlichen Entwicklung werden viele Menschen jedoch auf das Problem stoßen, dass die von ImageFontwidth () zurückgegebene Breite nicht mit der Breite ihrer erwarteten Zeichen übereinstimmt, insbesondere beim Zeichnen von Text oder Layout, wodurch das Bild ungewöhnlich angezeigt wird.

Dieser Artikel hilft Ihnen dabei, den Arbeitsmechanismus dieser Funktion, gemeinsame Missverständnisse und die Debugie und Lösung des Problems der inkonsistenten Breiten zu verstehen.


1. Grundnutzung und Arbeitsprinzip der ImageFontwidth ()

 <?php
// Verwenden Sie eine integrierte Schriftarting1,Holen Sie sich Charakterbreite
$font = 1;
$width = imagefontwidth($font);
echo "Font $font character width is $width pixels.";
?>

Die eingebauten Schriftarten in der GD-Bibliothek sind die Zahlen 1 bis 5, die Schriftarten unterschiedlicher Größen und Stile entsprechen. ImageFontwidth () gibt einen festen Wert für die Breite aller Zeichen in der Schrift zurück, da diese Schriftarten Monospaces sind. Diese Breite ist also die Standardbreite jedes Zeichens in der Schriftart.


2. Warum stimmt die zurückgegebene Breite nicht mit dem erwarteten überein?

2.1 Sie verwenden keine integrierten Schriftarten

ImageFontwidth () kann nur für integrierte GD-Schriftarten verwendet werden. Das Übergeben anderer Schriftressourcen ist ungültig und gibt die Zeichenbreite der benutzerdefinierten Schriftart nicht zurück, die Sie verwenden.

 // Falsche Verwendung,Durch die Übergabe von benutzerdefinierten Schriftdateiressourcen führen zu ungenauen Ergebnissen
$fontPath = '/path/to/custom/font.ttf';
$fontSize = 12;
$bbox = imagettfbbox($fontSize, 0, $fontPath, "A");
$width = imagefontwidth($fontPath); // Falsche Verwendung

Wenn Sie TTF -Schriftarten verwenden, sollten Sie die Funktion imageettFBBox () verwenden, um die tatsächliche Breite des Zeichens zu erhalten.


2.2 Eine Zeichenfolge ist ein Multi-Byte oder ein spezielles Zeichen

ImageFontwidth () gibt einen festen Wert der Breite eines einzelnen Zeichens zurück, und es ist unmöglich, den Unterschied in den Zeichenbreiten, insbesondere chinesischen, symbolischen oder Multi-Byte-Zeichen, zu unterscheiden.


2.3 Die falsche Schriftnummer wurde verwendet

Die integrierte Schriftnummer kann nur 1-5 betragen, und andere Zahlen verursachen falsche Ergebnisse.


3. Wie kann man die Charakterbreite richtig bekommen?

Wenn Sie integrierte Schriftarten verwenden, ist die Breite, die mit der Verwendung von ImageFontwidth () zurückgegeben wird, genau.

 <?php
$font = 3;
$width = imagefontwidth($font);
$height = imagefontheight($font);

echo "Font $font character width: $width px\n";
echo "Font $font character height: $height px\n";
?>

Wenn es sich um eine benutzerdefinierte Schriftart (TTF) handelt, sollte sie mit ImagettFBBox () berechnet werden:

 <?php
$text = "prüfenA";
$fontFile = 'm66.net/fonts/arial.ttf';  // Hier verwendet m66.net Der Domainname ersetzt den realen Pfad
$fontSize = 14;
$angle = 0;

$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);
$width = abs($bbox[2] - $bbox[0]);
$height = abs($bbox[7] - $bbox[1]);

echo "Text width: $width px\n";
echo "Text height: $height px\n";
?>

Hier gibt Imagettfbbox () die Koordinaten der vier Eckpunkte des Textrandes zurück, und die Breite und Höhe kann durch Berechnung erhalten werden.


4. Debugging Vorschläge

  • Schriftart Typ bestätigen : Bestätigen Sie zuerst, ob Sie integrierte Schriftarten oder benutzerdefinierte Schriftarten verwenden.

  • Testen Sie verschiedene Schriftzahlen : Stellen Sie sicher, dass die Schriftnummer beim Aufrufen von ImageFontwidth () gültig ist.

  • Drucken Sie die tatsächliche Breite : Kombinieren Sie ImageFontwidth () oder ImagettFBBox (), um die Breite auf der Seite oder die Befehlszeile zu drucken, um festzustellen, ob sie angemessen ist.

  • Beachten Sie die Codierung und Charaktertypen : Multi-Byte-Zeichen und chinesische Breite eignen sich nicht für die Verwendung integrierter Schriftfunktionen.

  • Testen Sie mit Bildanzeige : Nach dem Zeichnen von Text auf dem Bild geben Sie das Bild aus, um festzustellen, ob die Breite wie erwartet ist.


5. Beispiel: umfassender Demonstrationscode

 <?php
header('Content-Type: image/png');

$img = imagecreatetruecolor(300, 100);
$bgColor = imagecolorallocate($img, 255, 255, 255);
$txtColor = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $bgColor);

$font = 3;
$text = "Hello";

$charWidth = imagefontwidth($font);
$totalWidth = $charWidth * strlen($text);

imagestring($img, $font, (300 - $totalWidth) / 2, 40, $text, $txtColor);

imagestring($img, 1, 10, 10, "Char width: $charWidth px", $txtColor);

imagepng($img);
imagedestroy($img);
?>

Dieser Code zeigt, dass das Zeichnen einer Zeichenfolge mit integrierten Schriftarten und Berechnung der Zeichenbreite zeichnet.


Durch das Verständnis des Anwendungsbereichs von ImageFontwidth () und kombinierten Funktionen wie ImagettFBBox () können wir effektiv die Berechnungsfehler der Zeichenbreite vermeiden und die Genauigkeit der Bildtextzeichnung verbessern.