En PHP, la gestion des couleurs est une partie critique lors du traitement des images. Habituellement, nous utilisons ImageColorAllocate () pour attribuer une nouvelle couleur, ou utilisons ImageColorResolve () pour trouver une couleur définie. Si nous devons remplir la couleur de certaines zones de l'image et que cette couleur n'a pas été définie à l'avance, nous pouvons combiner ces deux fonctions pour remplir automatiquement la couleur non définie.
Dans cet article, nous allons montrer comment y parvenir avec ImageColorResolve () et ImageColorAllocate () et nous assurer que nous pouvons attribuer correctement les couleurs à chaque pixel.
ImageColorResolve () : Cette fonction renvoie un index de couleur avec la couleur spécifiée sur l'image actuelle. Si la couleur n'existe pas dans l'image, elle renvoie -1 .
ImageColorAllocate () : Cette fonction attribue une couleur à l'image et renvoie l'index de couleur de cette couleur. Si la couleur existe déjà, il renvoie l'index correspondant, sinon une nouvelle couleur est attribuée.
Supposons que nous créons une image et qu'il y a des couleurs qui ne sont pas définies. Pour éviter de définir à plusieurs reprises ces couleurs à chaque fois, nous pouvons vérifier si les couleurs existent déjà par ImageColorResolve () . Si la couleur existe déjà, nous utilisons ImageColorResolve () pour obtenir son index; Si la couleur n'existe pas, nous utilisons ImageColorAllocate () pour attribuer une nouvelle couleur.
<?php
// Créer une image vierge
$image = imagecreatetruecolor(200, 200);
// Régler la couleur
$backgroundColor = imagecolorallocate($image, 255, 255, 255); // Fond blanc
imagefill($image, 0, 0, $backgroundColor);
// Essayez de remplir la couleur
$colorToFill = [100, 150, 200]; // RGBvaleur
$colorIndex = imagecolorresolve($image, $colorToFill[0], $colorToFill[1], $colorToFill[2]);
// Si la couleur n'est pas définie,Utiliser imagecolorallocate Créer cette couleur
if ($colorIndex == -1) {
$colorIndex = imagecolorallocate($image, $colorToFill[0], $colorToFill[1], $colorToFill[2]);
}
// Dessinez un rectangle avec des couleurs remplies
imagefilledrectangle($image, 50, 50, 150, 150, $colorIndex);
// Image de sortie
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Création d'images : Tout d'abord, utilisez ImageCreateTrueColor () pour créer une image vierge de 200x200.
Affectation des couleurs d'arrière-plan : utilisez ImageColorAllocate () pour créer une couleur d'arrière-plan blanc et remplir l'image entière avec ImageFill () .
Remplissage de la couleur : nous définissons une valeur RVB [100, 150, 200] et utilisons ImageColorResolve () pour vérifier si la couleur existe déjà. Si la couleur n'existe pas, ImageColorResolve () reviendra -1 . À l'heure actuelle, nous utilisons ImageColorAllocate () pour attribuer cette nouvelle couleur.
Dessinez un graphique : utilisez la fonction ImageFildRectangle () pour dessiner un rectangle rempli sur l'image. La couleur de remplissage est l'index de couleur que nous venons de déterminer.
Image de sortie : Enfin, nous utilisons ImagePng () pour sortir l'image et détruire les ressources d'image via iMageDestroy () pour libérer la mémoire.
ImageColorResolve () et ImageColorAllocate () ne sont valides que lors de l'utilisation de la bibliothèque GD. Si votre environnement PHP n'a pas la bibliothèque GD activée, assurez-vous que vous avez installé et activé l'extension.
La façon dont ImageColorResolve () recherche les couleurs peut être limitée par la configuration des couleurs de l'image. Si l'image est créée en mode palette (comme .gif ), la recherche et l'attribution des couleurs peuvent différer du mode de couleur vraie.
En combinant ImageColorResolve () et ImageColorAllocate () , vous pouvez gérer efficacement l'allocation des couleurs dans votre image, en vous assurant que le système reconnaît et remplit automatiquement les couleurs non définies lorsqu'elle est nécessaire pour les remplir. Cela améliore non seulement la maintenabilité du code, mais évite également la duplication inutile des définitions et améliore les performances.