Position actuelle: Accueil> Derniers articles> Aligner manuellement le dessin de texte avec ImagesetPixel ()

Aligner manuellement le dessin de texte avec ImagesetPixel ()

M66 2025-06-05

Le texte de dessin est une exigence commune dans la bibliothèque GD d'extension de traitement d'image PHP. Habituellement, nous utilisons ImageString () ou ImageTtFText () pour dessiner du texte, mais ces fonctions sont plus simples en alignement et en disposition, et ont une flexibilité limitée. Si vous souhaitez contrôler avec précision la position du texte au niveau des pixels, en particulier l'alignement personnalisé, vous pouvez combiner ImageFontWidth () et ImageSetPixel () pour obtenir un dessin de texte et une typographie plus fins.

Cet article présentera le rôle de ces deux fonctions et comment les utiliser pour obtenir l'alignement manuel du dessin de texte.


1. Comprendre ImageFontWidth ()

La fonction ImageFontWidth () est utilisée pour obtenir la largeur (unités: pixels) d'un caractère dans une police intégrée spécifiée. La bibliothèque GD est livrée avec plusieurs polices intégrées (1 ~ 5), et la largeur et la hauteur du caractère de chaque police sont fixes.

 int imagefontwidth(int $font);
  • Paramètre $ FONT : Taille de la police, plage de 1 à 5.

  • Valeur de retour: la largeur (pixel) d'un seul caractère de la police.

Par exemple:

 $font = 3;
$charWidth = imagefontwidth($font);
echo "La largeur de la police est $charWidth Pixels";

Avec cette largeur, vous pouvez estimer la longueur du pixel requise pour dessiner une ligne de texte, puis ajuster l'alignement.


2. Comprendre ImagesetPixel ()

La fonction ImageSetPixel () est utilisée pour définir la valeur de couleur d'un seul pixel sur la ressource d'image spécifiée.

 bool imagesetpixel(resource $image, int $x, int $y, int $color);
  • $ Image : Ressource d'image.

  • $ x, $ y : les coordonnées du point de pixel.

  • $ Couleur : Index des couleurs ou couleur RVB.

Cela signifie que nous pouvons personnaliser la position du texte par le fonctionnement des pixels, et même l'affiner pour obtenir une disposition de texte plus précise.


3. Idée de mise en œuvre: combinez les deux pour obtenir l'alignement manuel

Habituellement, lorsque nous dessinons du texte, nous ne pouvons estimer à peu près la position globale en fonction de la taille de la police et de la longueur du texte, comme le centre, la gauche ou la droite. Mais lorsque des ajustements plus méticuleux sont nécessaires (tels que des positions de caractère individuelles affinées, des arrangements échelonnés et l'alignement des graphismes spéciaux), ImageFontWidth () et ImageSetPixel () sont utiles.

Exemples d'idées:

  1. Utilisez ImageFontWidth () pour obtenir la largeur de la police et calculer la largeur des pixels de toute la ligne de texte.

  2. Calculez la coordonnée X du point de départ du texte en fonction de l'exigence (comme l'alignement central).

  3. Utilisez une boucle pour parcourir chaque caractère dans la chaîne et dessiner une par une:

    • Utilisez d'abord ImageString () pour dessiner des caractères.

    • Ou utilisez ImagesetPixel () pour affiner les caractères, tels que l'ajout de pixels supplémentaires pour ajuster la position.

  4. En exploitant un seul pixel, un effet de déplacement et d'alignement détaillé est obtenu.


4. Exemple de code

Dans l'exemple suivant, il montre comment calculer manuellement le point de départ du dessin de texte, atteindre l'alignement central et affiner les pixels de bord du texte avec ImagesetPixel () pour améliorer l'effet visuel du texte.

 <?php
// Créer un 300x100 Images
$img = imagecreatetruecolor(300, 100);

// Définir la couleur d&#39;arrière-plan(Blanc)
$white = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $white);

// Définir la couleur du texte(noir)
$black = imagecolorallocate($img, 0, 0, 0);

$text = "Hello GD!";
$font = 3; // Polices intégrées

// Obtenez une largeur et une hauteur de caractère unique
$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);

// Calculer la largeur du texte
$textWidth = strlen($text) * $charWidth;

// Point de départ centré sur le niveau de calcul X coordonner
$startX = (imagesx($img) - $textWidth) / 2;
$startY = (imagesy($img) - $charHeight) / 2;

// Dessin de textuation manuel,Mettre en œuvre le réglage fin(如错开每个字一个Pixels)
for ($i = 0; $i < strlen($text); $i++) {
    $char = $text[$i];
    // Position de démarrage de chaque personnage,Augmenter Y Axe décalé décalé
    $x = $startX + $i * $charWidth;
    $y = $startY + ($i % 2); // Bizarre et même échelonné 1 Pixels

    // Dessiner des personnages
    imagestring($img, $font, $x, $y, $char, $black);

    // Ajustements fins supplémentaires:utiliser imagesetpixel() 给字符右下角加一个Pixels点,Augmenter视觉效果
    imagesetpixel($img, $x + $charWidth - 1, $y + $charHeight - 1, $black);
}

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

5. Résumé

  • ImageFontWidth () est une fonction clé pour comprendre la largeur de police intégrée et calculer la longueur et la position du texte.

  • ImageSetPixel () peut être affiné ou embelli une fois le dessin terminé pour obtenir un effet visuel de texte plus flexible.

  • En combinant les deux, la disposition du texte peut être contrôlée avec précision via un dessin à caractère par personnage et une opération de pixel par pixel pour répondre aux besoins personnalisés.

  • Cette technique est particulièrement adaptée aux scènes de rendu de texte d'image avec des exigences d'alignement strictes et une composition complexe.