Lors du traitement des images dans PHP, ImageFontWidth () est une fonction commune pour obtenir la largeur des caractères de police intégrés. Il est très important pour le positionnement du contenu du texte lors de la génération d'images de texte dynamiquement. Cependant, à mesure que les dispositifs d'affichage évoluent vers une haute résolution (HDPI), de nombreux développeurs ont commencé à prêter attention à savoir si ImageFontWidth () peut s'adapter avec précision aux images à haute résolution.
Cet article vous emmènera dans la discussion plus profonde de la performance de ImageFontWidth () dans les images haute résolution, vous aidant à comprendre ses limites et ses meilleures pratiques.
La fonction ImageFontWidth () renvoie la largeur d'un caractère dans une police intégrée donnée, en pixels. Des exemples d'utilisation sont les suivants:
<?php
$font = 5; // PHPNuméro de police intégré,portée1-5
$width = imagefontwidth($font);
echo "La largeur de la police est:$width Pixels";
?>
La largeur renvoyée ici est basée sur le nombre de pixels à une résolution standard et n'implique pas la taille physique ou la résolution réelle de l'image.
Les images haute résolution se réfèrent généralement à des images avec des pixels plus élevés par pouce (PPI), tels que 300 PPI ou plus, pour des dispositifs tels que l'impression ou les écrans de rétine. Les images haute résolution contiennent plus de pixels à la même taille physique, ce qui entraîne une vue visuelle plus claire.
Cependant, lors de la création d'images dans la bibliothèque PHP GD, les pixels sont toujours la plus petite unité de fonctionnement et les informations de résolution ne sont généralement pas directement codées ou utilisées. PHP GD n'ajoute pas automatiquement la largeur de police pour correspondre aux environnements PPI élevés.
Étant donné que ImageFontWidth () renvoie une largeur basée sur une taille de pixel de police intégrée fixe, il ne zoome pas automatiquement ou ne s'oppose pas automatiquement en fonction de la résolution de l'image. Par exemple:
<?php
$font = 3;
$width = imagefontwidth($font);
$img = imagecreatetruecolor(600, 400);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
imagestring($img, $font, 50, 50, "Test haute définition", $black);
// Largeur de police de sortie
echo "Largeur du caractère:$width Pixels";
// Enregistrer l'image
imagepng($img, 'test.png');
imagedestroy($img);
?>
Peu importe si vous agrandissez l'affichage d'image généré à HD, la valeur de largeur renvoyée par ImageFontWidth () restera toujours inchangée. Cela signifie:
Si vous dessinez du texte avec une taille d'image agrandie, la taille de police intégrée est toujours une taille de pixel fixe et le texte ne deviendra pas automatiquement "HD".
La valeur de largeur de caractère est cohérente avec les pixels rendues réelles et ne peut pas refléter les exigences d'amplification des écrans haute définition.
Utilisez des polices TrueType et ImagettfText ()
Par rapport aux polices intégrées, ImagettFText () prend en charge les fichiers de police personnalisés et les tailles de police arbitraires, et peut s'adapter à différentes résolutions: plus flexible:
<?php
$img = imagecreatetruecolor(600, 400);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
$fontFile = 'm66.net/fonts/arial.ttf'; // Chemin de police personnalisé
$fontSize = 20; // Taille de la police,Peut être ajusté en fonction des exigences
imagettftext($img, $fontSize, 0, 50, 100, $black, $fontFile, "Test haute définition");
// Générer une image
imagepng($img, 'test_ttf.png');
imagedestroy($img);
?>
Calculer dynamiquement la largeur du texte
La fonction ImageTtFBBox () renvoie la boîte de délimitation du texte donné sous la police et la taille spécifiées, qui peuvent être utilisées pour calculer avec précision la largeur du texte:
<?php
$fontFile = 'm66.net/fonts/arial.ttf';
$fontSize = 20;
$text = "Test haute définition";
$bbox = imagettfbbox($fontSize, 0, $fontFile, $text);
$textWidth = $bbox[2] - $bbox[0]; // Coin inférieur droitxcoordonner - Coin supérieur gauchexcoordonner
echo "La largeur du texte est:$textWidth Pixels";
?>
Dessinez des polices plus grandes dans des images haute résolution
L'utilisation de tailles de police plus grandes sur des images haute résolution et le dessin en fonction de l'échelle de l'affichage peut assurer la clarté du texte.
ImageFontWidth () renvoie la largeur de caractère de la police intégrée sous des pixels fixes, quelle que soit la résolution d'image.
Dans les environnements d'image à haute résolution, ImageFontWidth () ne peut pas refléter avec précision la largeur physique réelle de la taille de la police, ce qui entraîne le texte qui peut apparaître flou ou incorrect proportionnellement sur des dispositifs à haute définition.
Il est recommandé d'utiliser ImageTtFText () et ImageTtFBBox () qui prennent en charge les polices vectorielles pour contrôler dynamiquement la largeur et la taille du texte pour s'adapter aux exigences d'image à haute résolution.
En utilisant des polices TTF et en calculant les limites du texte, vous pouvez dessiner de manière flexible des images de texte haute définition de haute qualité.