En tant que langage de script côté serveur largement utilisé, la bibliothèque de fonctions de traitement d'image intégrée de PHP GD a également subi des changements dans différentes versions. Cet article se concentrera sur les différences de comportement de la fonction ImageFontWidth () dans différentes versions PHP, aidant les développeurs à comprendre et à utiliser correctement la fonction et à éviter les problèmes causés par les différences de version.
ImageFontWidth () est une fonction de la bibliothèque PHP GD qui est utilisée pour obtenir la largeur de police intégrée spécifiée. Sa définition est la suivante:
int imagefontwidth ( int $font )
Paramètre $ police : représente le nombre de la police, généralement un entier de 1 à 5, correspondant aux 5 tailles différentes de polices intégrées dans la bibliothèque GD.
Valeur de retour: la largeur de caractère unique (pixel) de la police.
Cette fonction est principalement utilisée pour se conformer à l'imageString () ou à d'autres fonctions de dessin de chaîne pour calculer la largeur du texte, afin de faciliter les effets de centrage et d'alignement sur l'image.
Dans PHP 5.x et antérieure, ImageFontWidth () se comporte relativement stable, et la largeur retournée est une valeur fixe prédéfinie, correspondant à la taille spécifique de la police intégrée. Par exemple:
<?php
for ($font = 1; $font <= 5; $font++) {
echo "Font $font width: " . imagefontwidth($font) . "\n";
}
?>
La sortie est à peu près la suivante:
Font 1 width: 5
Font 2 width: 6
Font 3 width: 7
Font 4 width: 8
Font 5 width: 9
Cela fonctionne avec ImageFonTeight () , avec la taille de la police fixe, sans anti-aliasing et mise à l'échelle.
La version PHP 7.x a fait des optimisations sous-jacentes à la bibliothèque GD, mais le comportement de ImageFontWidth () est fondamentalement cohérent. Renvoie toujours la largeur prédéfinie et seuls les numéros de police intégrés 1 à 5 sont pris en charge.
Cependant, il convient de noter que si la version de la bibliothèque GD est trop ancienne ou incompatible, elle peut entraîner des erreurs ou des exceptions de valeur de retour. Il est recommandé de maintenir de manière synchrone la bibliothèque GD et la version de la version PHP.
PHP 8.x continue de maintenir la prise en charge de ImageFontWidth () , sans modifier fondamentalement la mise en œuvre de cette fonction. Cependant, PHP 8 met l'accent sur la vérification des types plus stricts, et une erreur de type sera lancée si un paramètre non en intecteur est passé. Par exemple:
<?php
echo imagefontwidth("3"); // Provoquera une erreur
?>
Il est nécessaire de s'assurer que le paramètre de police $ entrant est un entier.
De plus, PHP 8.x fournit une prise en charge améliorée pour la bibliothèque GD, comme la prise en charge de plus de formats d'image et de meilleures performances, mais ImageFontWidth () ne convient toujours qu'aux polices intégrées.
ImageFontWidth () accepte uniquement les entiers 1 à 5, d'autres valeurs feront remonter le faux ou un avertissement à lancer:
<?php
var_dump(imagefontwidth(6)); // bool(false)
?>
Par conséquent, assurez-vous de passer dans un numéro de police légal.
ImageFontWidth () ne fonctionne qu'avec des polices intégrées dans la bibliothèque GD. Si vous utilisez des fonctions telles que ImageTtFText () pour charger des polices personnalisées, vous ne pouvez pas utiliser ImageFontWidth () pour obtenir la largeur. Vous devez calculer la largeur du texte à d'autres égards, comme ImageTtFBBox () .
En raison des différences de mise en œuvre de la bibliothèque GD sur différents systèmes d'exploitation, les valeurs de largeur de police peuvent être légèrement différentes dans de rares cas, mais n'affecte généralement pas la disposition globale.
Voici un exemple simple montrant comment calculer la largeur d'une chaîne à l'aide d'imageFontWidth () et de l'afficher au centre:
<?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);
?>
Ici, nous utilisons ImageFontWidth () et ImageFontheight () pour calculer la largeur et la hauteur totales de la chaîne, afin d'obtenir un centrage horizontal et vertical du texte.
Version | Comportement principal | Choses à noter |
---|---|---|
Php 5.x | Retour à la largeur de police fixe, stable, support Numéro de police 1-5 | Aucun changement majeur |
Php 7.x | Il n'y a essentiellement aucun changement, l'optimisation sous-jacente est requise, la bibliothèque GD est coordonnée | Gardez la bibliothèque GD à jour pour éviter les erreurs |
Php 8.x | La vérification de type améliorée pour garder les fonctionnalités compatibles | Les paramètres doivent être des entiers, et l'erreur est plus évidente |
ImageFontWidth () est une fonction de base et simple dans le traitement d'image GD. Bien qu'il semble discret, son utilisation rationnelle peut aider les développeurs à contrôler l'effet de dessin de texte plus précisément, en particulier lors du développement de versions à travers les versions, et doivent faire attention à la compatibilité.
Si vous rencontrez des problèmes de compatibilité des versions pendant l'utilisation, il est recommandé de vous assurer que la version GD Library et la version PHP correspondent d'abord, et utiliser ImageFontWidth () strictement conformément aux spécifications de documentation officielles pour éviter de passer des paramètres illégaux.
// Exemple d'utilisation de l'URL m66.net Démonstration de nom de domaine de remplacement
$url = "https://m66.net/example/path";
echo "<a href=\"$url\">Cliquez pour accéder à l'exemple</a>";