Position actuelle: Accueil> Derniers articles> Comment ajuster la mise en page et l'alignement du texte à l'aide d'imageFontWidth () lors de l'utilisation de la fonction ImageStRingUp ()?

Comment ajuster la mise en page et l'alignement du texte à l'aide d'imageFontWidth () lors de l'utilisation de la fonction ImageStRingUp ()?

M66 2025-06-15

En PHP, la fonction ImageStRingUp () est utilisée pour dessiner des chaînes verticalement sur une image. Il est similaire à ImageString () , mais le texte dessiné est verticalement vers le haut, ce qui est très pratique lors de la génération d'images avec un effet de texte rotatif. Cependant, lors du dessin du texte directement à l'aide d'ImmestRingUp () , la disposition et l'alignement du texte nécessitent souvent un contrôle manuel par le développeur. À l'heure actuelle, la fonction ImageFontWidth () peut être utile pour nous aider à calculer avec précision la largeur du caractère, a-t-il ainsi mieux réglé la disposition et l'alignement du texte.

Introduction aux concepts de base

  • ImageStrigup ()
    Utilisé pour dessiner des chaînes verticalement sur une image, la syntaxe est la suivante:

     bool imagestringup(resource $image, int $font, int $x, int $y, string $string, int $color);
    

    Parmi eux, $ FONT est la taille de police intégrée (1 ~ 5), $ x, $ y est la coordonnée de démarrage, $ String est le contenu du texte, et $ Color est la ressource couleur.

  • ImageFontWidth ()
    Renvoie la largeur du caractère de la taille de police intégrée spécifiée, la syntaxe est la suivante:

     int imagefontwidth(int $font);
    

L'utilisation de ces deux fonctions peut contrôler la position du texte lors du dessin, en évitant le haut de texte ou la disposition irrégulière.

Pourquoi dois-je utiliser ImageFontWidth () pour ajuster la disposition du texte?

Étant donné que l'imageStrigup () dessine du texte verticalement, l'espacement horizontal de chaque caractère est fixé, mais si la largeur du caractère n'est pas calculée et que le dessin de coordonnées est donné directement, le texte peut s'écarter de la position attendue, en particulier lorsque plusieurs lignes sont tracées ou centrées sur l'alignement. Par conséquent, il est nécessaire d'obtenir d'abord la largeur du caractère de la police via ImageFontWidth () , de calculer la position de dessin de chaque caractère et d'assurer la disposition du texte raisonnable.

Exemple pratique: mettant en œuvre l'alignement du centrage horizontal du texte vertical

Supposons que nous voulons tracer une ligne de chaîne verticalement dans une image avec une largeur de 200 pixels et obtenir un alignement de centrage horizontal:

 <?php
// Créer une image vierge
$width = 200;
$height = 100;
$image = imagecreatetruecolor($width, $height);

// Attribuer des couleurs
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

// Remplissez la couleur d&#39;arrière-plan
imagefill($image, 0, 0, $white);

$text = "Hello";
$font = 5;  // Taille de police intégrée 1~5

// Calculer la largeur du texte
$fontWidth = imagefontwidth($font);
$textWidth = strlen($text) * $fontWidth;

// Démarrage du calcul x coordonner,Atteindre le niveau central
$x = ($width - $textWidth) / 2;

// y coordonner从底部开始向上绘制
$y = 80;

// utiliser imagestringup() Dessiner du texte vertical
imagestringup($image, $font, $x, $y, $text, $black);

// Image de sortie
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>

illustrer:

  • Obtenez la largeur de chaque caractère de la police par ImageFontWidth ($ FONT) .

  • Multipliez par la longueur de la chaîne pour obtenir la largeur du texte globale.

  • Soustrayez la largeur du texte par la largeur de l'image et divisez-la par 2 pour atteindre le centre de texte horizontalement.

  • Dans les coordonnées de l'imageStrighup () , x est le bord gauche du texte, et y est la coordonnée verticale de la ligne de base au bas du texte.

Avancé: réalisez l'alignement centré sur le texte vertical multi-lignes

Si vous devez dessiner plusieurs lignes de texte vertical, telles que dessiner plusieurs segments de texte disposés de gauche à droite, et chaque segment s'affiche verticalement, nous pouvons également utiliser ImageFontWidth () pour calculer la largeur de chaque segment et ajuster dynamiquement les coordonnées x:

 <?php
$width = 300;
$height = 150;
$image = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);

$font = 4;
$texts = ["PHP", "Imagestringup", "Example"];

// Calculez la largeur totale
$fontWidth = imagefontwidth($font);
$totalWidth = 0;
foreach ($texts as $t) {
    $totalWidth += strlen($t) * $fontWidth + 10; // Chaque intervalle10Pixels
}
$totalWidth -= 10; // Le dernier n&#39;est pas espacé

// Commencer x coordonner居中
$x = ($width - $totalWidth) / 2;
$y = 130;

foreach ($texts as $t) {
    imagestringup($image, $font, $x, $y, $t, $black);
    $x += strlen($t) * $fontWidth + 10;
}

header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>

Cela permet un contrôle flexible de la disposition et de l'alignement de plusieurs textes verticaux.