Quelqu'un peut-il m'aider avec un simple script pour remplacer une couleur spécifique par une autre couleur dans une image en utilisant PHP? Voici un exemple (la couleur passe du vert au jaune).
Réponses
Trop de publicités?Si vous voulez utiliser la bibliothèque GD en PHP, vous devriez vérifier imagefilter()
Les étapes sont :
- Commencez avec une image .PNG, utilisez du blanc pour l'intérieur, de l'alpha pour l'extérieur.
- Utilisez
imagefilter($img, IMG_FILTER_COLORIZE, 0, 255, 0))
Où 0,255,0 est votre couleur RGB (vert vif dans cet exemple) - Enregistrez l'alpha et affichez le résultat.
Édition, code de travail et clarification.
Je voulais dire, en utilisant alpha pour l'EXTÉRIEUR des lignes noires, et du blanc À L'INTÉRIEUR. Voici l'image d'exemple :
Et voici un code de travail pour coloriser les parties blanches :
header('Content-Type: image/png');
/* RGB de votre couleur intérieure */
$rgb = array(0,0,255);
/* Votre fichier */
$file="../test.png";
/* Valeurs négatives, ne pas modifier */
$rgb = array(255-$rgb[0],255-$rgb[1],255-$rgb[2]);
$im = imagecreatefrompng($fichier);
imagefilter($im, IMG_FILTER_NEGATE);
imagefilter($im, IMG_FILTER_COLORIZE, $rgb[0], $rgb[1], $rgb[2]);
imagefilter($im, IMG_FILTER_NEGATE);
imagealphablending( $im, false );
imagesavealpha( $im, true );
imagepng($im);
imagedestroy($im);
Remarque : Nous devons négativer les valeurs puisque la colorisation fonctionne uniquement pour les parties non blanches. Nous pourrions contourner cela en ayant une image avec une bordure blanche et un intérieur noir.
Remarque : Ce code fonctionne uniquement pour les images avec une bordure noire et un intérieur blanc.
L'approche lente mais sûre, itérant sur chaque pixel.
fonction ReplaceColour($img, $r1, $g1, $b1, $r2, $g2, $b2)
{
if(!imageistruecolor($img))
imagepalettetotruecolor($img);
$col1 = (($r1 & 0xFF) << 16) + (($g1 & 0xFF) << 8) + ($b1 & 0xFF);
$col2 = (($r2 & 0xFF) << 16) + (($g2 & 0xFF) << 8) + ($b2 & 0xFF);
$width = imagesx($img);
$height = imagesy($img);
for($x=0; $x < $width; $x++)
for($y=0; $y < $height; $y++)
{
$colrgb = imagecolorat($img, $x, $y);
if($col1 !== $colrgb)
continue;
imagesetpixel ($img, $x , $y , $col2);
}
}
Je suppose que la réponse serait d'avoir plusieurs versions de l'image et puis de charger l'image correcte en fonction de la couleur choisie?
Vous pourriez utiliser une déclaration switch pour charger l'image correcte
//get selected colour
switch ($colour) {
case "red":
echo "
`
J'espère que cela vous aidera.
`