Lorsque vous travaillez avec des images en PHP, la modification dynamiquement des cartes de couleur est une compétence très pratique. Surtout lorsque nous voulons changer rapidement certaines couleurs dans une image basée sur une palette sans redessiner l'image entière, ImageColorset () et ImageColorResolve () deviennent particulièrement importantes.
Cet article vous apprendra à utiliser ces deux fonctions en conjonction avec l'effet de la modification dynamique de la carte des couleurs de l'image.
ImageColorset (Ressource $ image, index int $, int $ red, int $ vert, int $ bleu, int $ alpha = 0): bool
Cette fonction peut modifier directement la valeur de couleur d'un index de couleur dans la palette d'images. C'est-à-dire que si un pixel sur la figure utilise cet index de couleur, sa couleur changera également immédiatement.
ImageColorResolve (Ressource $ image, int $ red, int $ vert, int $ bleu): int
Cette fonction trouve l'index le plus proche de la couleur RVB spécifiée dans la palette d'images. Si la couleur correspondante exacte n'est pas trouvée, elle essaie d'attribuer un nouvel index.
Ces deux fonctions peuvent être utilisées ensemble pour nous permettre de localiser la couleur que nous souhaitons d'abord modifier, puis de définir dynamiquement la nouvelle couleur.
Supposons que nous ayons une image de palette simple et que nous voulons changer le bleu d'origine de l'image en rouge.
<?php
// Créer une image de palette simple
$image = imagecreate(100, 100);
// Définissez la couleur initiale
$white = imagecolorallocate($image, 255, 255, 255); // Couleur de fond:Blanc
$blue = imagecolorallocate($image, 0, 0, 255); // Couleur brosser:bleu
// 用bleu画一个矩形
imagefilledrectangle($image, 10, 10, 90, 90, $blue);
// 动态找到bleu的Index des couleurs
$targetIndex = imagecolorresolve($image, 0, 0, 255);
// utiliser imagecolorset 修改bleu为rouge色
// Les paramètres sont:Ressources d'image、Index des couleurs、rouge、vert、bleu、transparence
imagecolorset($image, $targetIndex, 255, 0, 0);
// Image de sortie au navigateur
header('Content-Type: image/png');
imagepng($image);
// Mémoire libre
imagedestroy($image);
?>
Une fois ce code exécuté, vous verrez que le rectangle bleu d'origine devient rouge, ce qui est très soyeux.
Cette méthode ne s'applique qu'aux images de palette (c'est-à-dire une image basée sur la palette, telle que GIF ou de petites images créées avec ImageCreate () ).
Pour les images de vraies couleurs (créées par ImageCreateTrueColor () ), ImageColorset () n'est pas valide.
S'il y a plusieurs couleurs similaires mais pas exactement les mêmes dans l'image, les couleurs trouvées à l'aide d'imageColorResolve () peuvent ne pas être ce que vous attendiez, donc vous devez parfois standardiser la palette de l'image à l'avance.
Par exemple, si vous souhaitez développer une fonction de page Web, les utilisateurs peuvent cliquer sur le bouton pour modifier dynamiquement la couleur de l'image, et vous pouvez utiliser la solution ci-dessus pour le combiner avec un formulaire simple à soumettre. Par exemple:
<form method="post" action="https://m66.net/change_color.php">
<input type="submit" name="change" value="Changer la couleur!">
</form>
Ensuite, utilisez le script tout à l'heure pour traiter l'image pour obtenir l'effet du changement de couleur dynamique.
En combinant l'image Color Resolve () pour trouver l'index de couleur cible, puis en utilisant ImageColorset () pour modifier la valeur de couleur correspondante, il est très pratique de réaliser le remplacement de couleur d'image dynamique. Cette technologie convient particulièrement à une utilisation lorsqu'elle est nécessaire de modifier rapidement la zone de couleur fixe, telles que les cartes de jeu, la personnalisation dynamique des icônes et d'autres scénarios.
Si votre projet doit traiter un grand nombre d'images dynamiques, il est recommandé de l'utiliser avec des bibliothèques de traitement d'images plus avancées telles que GD ou Imagick pour des fonctionnalités plus puissantes.