Als weit verbreitete serverseitige Skriptsprache hat der integrierte GD der integrierten Bildverarbeitungsfunktionsbibliothek von PHP auch einige Änderungen in verschiedenen Versionen erfahren. Dieser Artikel konzentriert sich auf die Verhaltensunterschiede der ImageFontwidth () -Funktion in verschiedenen PHP -Versionen, um Entwicklern zu helfen, die Funktion korrekt zu verstehen und zu verwenden und Probleme zu vermeiden, die durch Versionsunterschiede verursacht werden.
ImageFontwidth () ist eine Funktion in der PHP-GD-Bibliothek, mit der die angegebene integrierte Schriftbreite erhalten wird. Seine Definition ist wie folgt:
int imagefontwidth ( int $font )
Parameter $ font : repräsentiert die Anzahl der Schriftart, normalerweise eine Ganzzahl von 1 bis 5, die den 5 verschiedenen Größen von in der GD -Bibliothek eingebauten Schriftarten entspricht.
Rückgabewert: Die einzelnen Zeichenbreite (Pixel) der Schriftart.
Diese Funktion wird hauptsächlich zur Einhaltung von Imagestring () oder anderen Zeichenfolgenzeichnungsfunktionen verwendet, um die Textbreite zu berechnen, um die Zentrier- und Ausrichtungseffekte auf das Bild zu erleichtern.
In PHP 5.x und früher verhält sich ImageFontwidth () relativ stabil, und die zurückgegebene Breite ist ein vordefinierter fester Wert, der der spezifischen Größe der integrierten Schrift entspricht. Zum Beispiel:
<?php
for ($font = 1; $font <= 5; $font++) {
echo "Font $font width: " . imagefontwidth($font) . "\n";
}
?>
Der Ausgang ist ungefähr wie folgt:
Font 1 width: 5
Font 2 width: 6
Font 3 width: 7
Font 4 width: 8
Font 5 width: 9
Dies funktioniert mit ImageFonTeiT () , wobei die Schriftgröße ohne Anti-Aliasing und Skalierung festgelegt ist.
Die PHP 7.x -Version hat einige zugrunde liegende Optimierungen für die GD -Bibliothek vorgenommen, das Verhalten von ImageFontwidth () ist im Grunde genommen konsistent. Nehmen Sie die vordefinierte Breite zurück und nur integrierte Schriftarten 1 bis 5 werden unterstützt.
Es ist jedoch zu beachten, dass die GD -Bibliotheksversion zu alt oder nicht kompatibel ist, sie zu Fehlern oder Rückgabewertausnahmen führen kann. Es wird empfohlen, die GD -Bibliothek und die PHP -Version synchron zu halten.
PHP 8.x behält weiterhin die Unterstützung für ImageFontwidth () bei, ohne die Implementierung dieser Funktion grundlegend zu ändern. Php 8 betont jedoch die strengere Überprüfung des Typs, und ein Typfehler wird geworfen, wenn ein Nichttegerparameter übergeben wird. Zum Beispiel:
<?php
echo imagefontwidth("3"); // Wird einen Fehler verursachen
?>
Es ist notwendig, sicherzustellen, dass der eingehende Parameter von $ font eine Ganzzahl ist.
Darüber hinaus bietet PHP 8.x eine verbesserte Unterstützung für die GD-Bibliothek, z. B. die Unterstützung von mehr Bildformaten und eine bessere Leistung, aber ImageFontwidth () ist nur für integrierte Schriftarten geeignet.
ImageFontwidth () akzeptiert nur Ganzzahlen 1 bis 5, andere Werte werden dazu führen, dass die falsche zurückgegeben oder eine Warnung geworfen wird:
<?php
var_dump(imagefontwidth(6)); // bool(false)
?>
Geben Sie daher unbedingt eine rechtliche Schriftnummer weiter.
ImageFontwidth () funktioniert nur mit in der GD -Bibliothek eingebauten Schriftarten. Wenn Sie Funktionen wie ImagettFtext () zum Laden benutzerdefinierter Schriftarten verwenden, können Sie ImageFontwidth () nicht verwenden, um die Breite zu erhalten. Sie müssen die Textbreite auf andere Weise berechnen, wie z. B. ImagettFBBox () .
Aufgrund der Implementierungsunterschiede in der GD -Bibliothek in verschiedenen Betriebssystemen können sich die Schriftstellungswerte in seltenen Fällen geringfügig unterscheiden, beeinflussen jedoch im Allgemeinen nicht das Gesamtlayout.
Hier ist ein einfaches Beispiel, das zeigt, wie die Breite einer Zeichenfolge mithilfe von ImageFontwidth () berechnet und in der Mitte angezeigt wird:
<?php
header('Content-Type: image/png');
$img_width = 200;
$img_height = 50;
$image = imagecreatetruecolor($img_width, $img_height);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
$text = "Hello PHP";
$font = 3;
$font_width = imagefontwidth($font);
$text_width = strlen($text) * $font_width;
$x = ($img_width - $text_width) / 2;
$y = ($img_height - imagefontheight($font)) / 2;
imagestring($image, $font, $x, $y, $text, $black);
imagepng($image);
imagedestroy($image);
?>
Hier verwenden wir ImageFontwidth () und ImageFontheight (), um die Gesamtbreite und Höhe der Zeichenfolge zu berechnen, um horizontale und vertikale Zentrierung des Textes zu erreichen.
Version | Hauptverhalten | Dinge zu beachten |
---|---|---|
PHP 5.x | Kehren Sie zur festen Schriftbreite, stabil, unterstützen Sie die Schriftart 1-5 unterstützen | Keine größeren Veränderungen |
PHP 7.x | Es gibt im Grunde keine Änderung, die zugrunde liegende Optimierung ist erforderlich, die GD -Bibliothek ist koordiniert | Halten Sie die GD -Bibliothek auf dem neuesten Stand, um Fehler zu vermeiden |
PHP 8.x | Verbesserte Typprüfung, um Funktionen kompatibel zu halten | Die Parameter müssen Ganzzahlen sein und der Fehler ist offensichtlicher |
ImageFontwidth () ist eine grundlegende und einfache Funktion in der GD -Bildverarbeitung. Obwohl es unauffällig erscheint, kann seine rationale Verwendung den Entwicklern helfen, den Textzeichnungseffekt genauer zu kontrollieren, insbesondere bei der Entwicklung über Versionen, und müssen auf die Kompatibilität achten müssen.
Wenn Sie während der Verwendung auf Versionskompatibilitätsprobleme auf Versionen stoßen, wird empfohlen, sicherzustellen, dass die GD -Bibliotheksversion und die PHP -Version zuerst übereinstimmen, und die Verwendung der offiziellen Dokumentationsspezifikationen ausschließlich im Übereinstimmung mit ImageFontwidth () verwenden, um die Übergabe illegaler Parameter zu vermeiden.
// Beispiel URL -Verwendung m66.net Ersatzdomainnamen Demonstration
$url = "https://m66.net/example/path";
echo "<a href=\"$url\">Klicken Sie hier, um auf das Beispiel zuzugreifen</a>";