Position actuelle: Accueil> Derniers articles> Quelle est la fonction ImagesetStyle? Comment l'utiliser correctement dans PHP?

Quelle est la fonction ImagesetStyle? Comment l'utiliser correctement dans PHP?

gitbox 2025-09-26

Aperçu

ImageSetStyle () est une fonction fournie par l'extension GD de PHP, qui est utilisée pour définir le "style" (c'est-à-dire la séquence de pixels) pour le dessin de ligne, de sorte que les lignes pointillées et pointillées prédéfinies, les lignes pointillées ou d'autres types de lignes complexes peuvent être utilisées lors de l'appel de fonctions de dessin telles que Imageline () , ImagePolygon () , etc. IMG_COLOR_STYLEDBRUSHED utilisé en conjonction avec le pinceau) lors du dessin de la ligne et tracez les lignes par style. Php +1

Signature de la fonction

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagesetstyle</span></span><span> ( GdImage|resource </span><span><span class="hljs-variable">$image</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$style</span></span><span> )
</span></span>
  • $ Image : une ressource d'image ou un objet gdimage renvoyé par ImageCreateTrueColor () ou ImageCreate () , etc.

  • $ Style : un tableau composé de plusieurs "couleurs de pixels" (ne peut pas être un tableau vide). Les éléments du tableau sont généralement des identificateurs de couleur (intégrales) renvoyés par ImageColorAllocate () / ImageColorAllocatEalpha () , et peuvent également contenir la constante IMG_COLOR_TRANSPARENT pour représenter des pixels transparents. La fonction renvoie vrai avec succès et false si elle échoue. Php

Principe de travail (compréhension intuitive)

Considérez le style $ comme une chaîne de "motifs de pixels", comme [rouge, rouge, rouge, blanc, blanc] . Lorsque vous dessinez des lignes et utilisez une couleur spéciale IMG_COLOR_STYLED , GD lira les pixels en séquence le long de la ligne. Lorsque vous rencontrez des valeurs de couleur, dessinez les pixels correspondants et lorsque vous rencontrez des valeurs transparentes, les sautez, formant ainsi des effets tels que les lignes de tableau de bord, les points et les lignes. Plus le tableau de style est long et plus la combinaison est complexe, plus vous pouvez créer de types de lignes. Tecfa

Constantes communes (besoin de savoir)

  • IMG_COLOR_STYLED : Utilisé comme paramètre de couleur dans des fonctions telles que Imageline () , indiquant que les lignes sont tracées à l'aide du tableau de style actuel.

  • IMG_COLOR_BRUSHED / IMG_COLOR_STYLEDBRUSHED : Constantes de couleurs spéciales utilisées en combinaison avec Brush (Brush) (peut être utilisée pour des scènes de dessin plus complexes).

  • IMG_COLOR_TRANSPAREENT : Un pixel transparent est représenté dans un tableau de style.
    Ces constantes sont décrites dans la table constante PHP Image / GD. Php

Exemple de base: dessin de lignes pointillées (exemple complet, peut être exécuté directement)

L'exemple suivant montre comment créer une canevas, définir un style, tracer une ligne pointillée diagonale avec Imageline () , puis sortir l'image en tant que fichier PNG (ou directement affiché par le navigateur):

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// tête(Si vous publiez l&#39;image directement dans le navigateur)</span></span><span>
</span><span><span class="hljs-comment">// header('Content-Type: image/png');</span></span><span>

</span><span><span class="hljs-comment">// Créer une toile</span></span><span>
</span><span><span class="hljs-variable">$w</span></span><span> = </span><span><span class="hljs-number">300</span></span><span>;
</span><span><span class="hljs-variable">$h</span></span><span> = </span><span><span class="hljs-number">200</span></span><span>;
</span><span><span class="hljs-variable">$im</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-variable">$w</span></span><span>, </span><span><span class="hljs-variable">$h</span></span><span>);

</span><span><span class="hljs-comment">// Distribution des couleurs</span></span><span>
</span><span><span class="hljs-variable">$white</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>);
</span><span><span class="hljs-variable">$black</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-variable">$red</span></span><span>   = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);

</span><span><span class="hljs-comment">// Remplir l&#39;arrière-plan</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefilledrectangle</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$w</span></span><span>-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$h</span></span><span>-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>);

</span><span><span class="hljs-comment">// Définir les styles:5 Pixels rouges,5 Pixels blancs —— Former une ligne pointillée claire</span></span><span>
</span><span><span class="hljs-variable">$style</span></span><span> = [
    </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>,
    </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>
];

</span><span><span class="hljs-comment">// Style</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagesetstyle</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-variable">$style</span></span><span>);

</span><span><span class="hljs-comment">// Dessiner des lignes en utilisant le style:Entrée des couleurs spéciales IMG_COLOR_STYLED</span></span><span>
</span><span><span class="hljs-comment">// Avis:imageline() Le dernier paramètre accepte un indice de couleur ou une constante spéciale</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imageline</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$w</span></span><span> - </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$h</span></span><span> - </span><span><span class="hljs-number">10</span></span><span>, IMG_COLOR_STYLED);

</span><span><span class="hljs-comment">// Enregistrer dans le fichier(Exemple),Ou utiliser imagepng($im); Sortie vers le navigateur</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/dashed_example.png'</span></span><span>);

</span><span><span class="hljs-comment">// Libérer les ressources</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>);
</span></span>

Le code ci-dessus générera un discours_example.png , avec la ligne pointillée affichée sur la ligne diagonale qui boucle par style. Points clés: ImageSetStyle () définit le tableau de style, puis utilisez IMG_COLOR_STYLED lors du dessin de lignes pour les dessiner avec style. TECFA PHP

Style avec des pixels transparents (exemple)

Si vous voulez des lignes pointillées plus délicates, vous pouvez définir quelques entrées dans le style sur img_color_transparent pour indiquer que le pixel n'est pas dessiné, formant ainsi un espace:

 <span><span><span class="hljs-variable">$style</span></span><span> = [</span><span><span class="hljs-variable">$black</span></span><span>, </span><span><span class="hljs-variable">$black</span></span><span>, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT]; 
</span><span><span class="hljs-title function_ invoke__">imagesetstyle</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-variable">$style</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imageline</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-number">280</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, IMG_COLOR_STYLED);
</span></span>

Cela dessinera 2 points noirs tous les deux pixels, puis sautera 2 pixels et répétera. Php

Utilisé en combinaison avec Brush

GD prend également en charge "Brush" (via Imagesetbrush () ) pour tracer des lignes complexes. Si vous définissez les styles et les pinceaux pour les lignes et utilisez IMG_COLOR_STYLEDBRUSHED lors du dessin, GD combine l'index de style avec les pixels de pinceau à rendre. Cette utilisation convient aux scènes où différents effets de pinceau doivent être commutés par le style (comme les lignes en pointillés mais avec des modèles différents pour chaque segment). Pour plus de détails, veuillez vous référer au chapitre sur les pinceaux du manuel GD. Php +1

Pièges et précautions communes

  1. Le tableau de style ne peut pas être vide : le passage dans un tableau vide entraînera une défaillance. Php

  2. Type d'élément de style : L'élément de tableau doit être un index de couleur attribué ( ImageColorAllocate () Retour Valeur) ou une constante IMG_COLOR_TRANSPAREENT . L'écriture des tableaux RVB directement ne prendra pas en vigueur. Tecfa

  3. Longueur et effet de style : plus le tableau de style est long, plus il est flexible, mais il consomme également plus de mémoire et de calcul (généralement, plus la longueur de style est courte).

  4. Problème de direction de ligne / barre oblique : Il y avait les premiers bugs PHP / GD dans l'histoire qui ont affecté certains styles de barre oblique, mais cette fonction a été stable dans les versions PHP modernes. Si vous rencontrez des problèmes étranges, vérifiez d'abord les extensions PHP et GD et déboguez les petits exemples manuellement. Php mwkworks.com

  5. Compatibilité avec le mode couleur de l'image : il est généralement acceptable d'utiliser des styles sur de vraies images couleur; Faites attention au nombre de limites de couleurs sur les images des couleurs de l'index. L'utilisation d' imageCreateTrueColor () peut éviter de nombreux problèmes de compatibilité des couleurs. Php

Suggestions d'utilisation avancées

  • Utilisez le style + des pixels transparents pour fabriquer des bordures en pointillés ou des échelles de barre de progression.

  • Générez dynamiquement les tableaux de style au moment de l'exécution (par exemple, calculez les tableaux en fonction de la longueur et de la longueur de tirage requis) pour un multiplexage et un paramétrage faciles.

  • Si vous avez besoin de textures plus complexes (segments à motifs plutôt que de pixels uniques), pensez à combiner imagesetbrush () ou les dessinant à plusieurs reprises avec de petits motifs. Php

Résumé (examen des points clés)

  • ImageSetStyle () est utilisé pour définir le tableau de lignes de style pixel, et peut être utilisé dans des fonctions telles que Imageline () pour obtenir des lignes pointillées, des lignes en pointillés, etc. PHP +1

  • L'élément de tableau de style doit être un index de couleur ou IMG_COLOR_TRANSPARENT et le tableau ne peut pas être vide. Php

  • Si des effets de ligne plus complexes sont nécessaires, il peut être utilisé en conjonction avec des constantes de pinceau (telles que IMG_COLOR_STYLEDBRUSHED ) ou ImageSetbrush () . Php