Lors du traitement des images à l'aide de la bibliothèque GD de PHP, ImageColorResolve () et ImageColorAllocate () sont deux fonctions fréquemment rencontrées. Bien qu'ils soient tous liés à la couleur, leurs utilisations et effets réels varient. Comprendre la différence entre eux nous aidera à choisir des méthodes plus appropriées pendant le processus de développement et à améliorer l'efficacité et la qualité du traitement d'image.
ImageColorAllocate () est utilisé pour attribuer une nouvelle couleur sur une image. Autrement dit, c'est pour ajouter une couleur à la palette de l'image et retourner l'identifiant de la couleur.
Si l'image est basée sur une palette (comme la PNG 8 bits ou le GIF), chaque fois qu'une nouvelle couleur est attribuée, un enregistrement est ajouté à la palette interne jusqu'à ce que la capacité maximale de la palette soit atteinte (généralement 256 couleurs). Si la palette est pleine, ImageColorAllocate () échouera, renvoyant faux .
Exemple de code:
<?php
$image = imagecreate(100, 100); // Créer un 100x100 Images vierges
$red = imagecolorallocate($image, 255, 0, 0); // Attribuer un rouge
imagefill($image, 0, 0, $red); // Remplissez l'arrière-plan de rouge
imagepng($image, 'https://m66.net/upload/red.png');
imagedestroy($image);
?>
Dans le code ci-dessus, nous disons explicitement à PHP que nous avons besoin d'un tout nouveau rouge qui sera affecté à la palette et renvoie l'ID de couleur correspondant.
ImageColorResolve () est utilisé pour trouver une couleur existante la plus proche de la valeur RVB donnée . S'il existe, il renvoie l'ID de couleur existant. S'il n'y a pas de proche et qu'il y a de la place pour la palette, il attribuera une nouvelle couleur.
Autrement dit, il donne la priorité à l'utilisation des couleurs existantes, en évitant l'ajout inutile de nouvelles couleurs, afin qu'elle puisse utiliser des ressources de palette limitées plus efficacement.
Exemple de code:
<?php
$image = imagecreate(100, 100); // Créer un 100x100 Images vierges
$red = imagecolorresolve($image, 254, 1, 1); // Trouvez une couleur près du rouge
imagefill($image, 0, 0, $red); // Remplissez l'arrière-plan des couleurs trouvées
imagepng($image, 'https://m66.net/upload/resolved_red.png');
imagedestroy($image);
?>
Notez que ImageColorResolve () nécessite près de la couleur spécifiée, pas une allocation précise.
Choisir ImageColorAllocate () ou ImageColorResolve () dépend de vos besoins:
Si vous avez besoin d'une couleur sûre et précise qui peut tolérer la croissance de la palette de couleurs, choisissez ImageColorAllocate () .
Si vous souhaitez économiser sur les ressources des palettes et réutiliser autant que possible les couleurs existantes, sélectionnez ImageColorResolve () .
D'une manière générale, si vous savez que le nombre de couleurs dans une image ne sera pas trop grand, vous pouvez utiliser ImageColorAllocate () directement. Si l'image est riche en couleur ou si vous travaillez sur des images qui ont des limites sur le nombre de couleurs comme les GIF, il est recommandé d'utiliser ImageColorResolve () en premier.
Points fonctionnels | ImageColorAllocate () | ImageColorResolve () |
---|---|---|
But | Affecter une nouvelle couleur | Utilisez les couleurs proches existantes et affectez-les si nécessaire |
Pression de palette | Grand (peut provoquer un débordement) | Petit (réutilisable autant que possible) |
Utiliser des scénarios | Scènes de contrôle des couleurs précises | Scènes qui sauvent les ressources de couleur |
Dans le développement réel, la maîtrise de la différence entre ces deux fonctions peut rendre votre programme de traitement d'image efficace et stable!