Recolorisation d'une image avec la lib. GD

Signaler
Messages postés
209
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 janvier 2008
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour,
Je cherche a faire un petit script à l'aide de la librairie GD pour changer les couleurs d'une image que je lui passe à l'aide d'un formulaire d'upload.
Je suis hebergé chez OVH et la librairie GD est activée.
En guise de précision, j'aimerai que le script prenne une couleur que j'aurais pris le soin de définir à l'avance et me la remplace avec une autre définie elle aussi.

Merci de votre aide et bonne après midi

5 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

consulte ça : http://fr.php.net/manual/fr/function.imagecolorresolve.php
et ça :
http://fr.php.net/manual/fr/function.imagecolorset.php

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
209
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Effectivement c'est pas mal. Ca peut servir a trouver les couleurs a changer.
Reste maintenant a trouver la fonction permettant de changer la couleur car il s'agit ici de remplacer une couleur présente dans l'aimge par une autre que j'aurais donnée moi dans le script.
Tout ca dans le but de changer totalement les couleurs de l'image.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Heu je comprends pas ton dernier message. Tu veux bien remplacer une couleur par une autre non ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
209
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Oui, et j'ai trouvé entre temps...
regarde :
<?
$filePath='MonImage.png'; // Chemin de l'image
//Déclaration Array
$NbCouleur = 20;
$couleur_orig = array(
"eau"=>array("59AFDD", "62A3C5", "5BABD6"),
"foret"=>array("A3DBB0"),
"Ilots"=>array("FFE3B1"),
"Fond"=>array("FFF3DC",
"BordsRte"=>array("#87817F",
"route60"=>array("FFA985",
"route40"=>array("FFF991",
"route20"=>"FFFFFF",
"chemin"=>"E3D1BA");
$couleur_new = array(
"eau"=>array("000000"),
"foret"=>"000000",
"Ilots"=>"000000",
"Fond"=>"000000",
"BordsRte"=>"FFFFFF",
"route60"=>"000000",
"route40"=>"000000",
"route20"=>"000000",
"chemin"=>"000000");
$couleur_type = array("eau", "foret", "Ilots", "Fond", "BordsRte", "route60", "route40", "route20", "chemin");


img_color($filePath,$couleur_orig, $couleur_new, $couleur_type, $NbCouleur);
function img_color($filePath,$couleur_orig, $couleur_new, $couleur_type, $NbCouleur){
// crée l'image et compte ses couleurs
$im = img_create($filePath);
if(!empty($im)){
$k=imagecolorstotal($im);
// si l'image est en truecolor, convertit en palette
if(!$k){
imagetruecolortopalette($im,true,65536*256);
}
for($i=0;$i<$NbCouleur;$i++){
$type = $couleur_type[$i];
for($j=0;$j<10;$j++){
//--------------------------------- COULEUR ORIGINALE --------------------------------------------
$couleurOrig = $couleur_orig[$type][$j];//On sort la valeur de la couleur a changer des array déclarés plus haut
//Décomposition composantes
if($couleurOrig[0]=='#'){
$couleurOrig = substr($couleurOrig,1);//On vire le '#" si il existe en début de chaine
}
$rougeOrig = hexdec(substr($couleurOrig,0,2));//On sort la valeur en Base 10 de la veleur du rouge
$vertOrig = hexdec(substr($couleurOrig,2,2));//On sort la valeur en Base 10 de la veleur du vert
$bleuOrig = hexdec(substr($couleurOrig,4,2));//On sort la valeur en Base 10 de la veleur du bleu
//Obentention de l'index
$couleurOrigIndex = imagecolorexact ($im, $rougeOrig, $vertOrig, $bleuOrig);//On récupere l'index de la couleur a changer

//--------------------------------- NOUVELLE COULEUR --------------------------------------------
$couleurNew = $couleur_new[$type][0];//On sort la valeur de la couleur a changer des array déclarés plus haut
//Décompostion composantes
if($couleurNew[0]=='#'){
$couleurNew = substr($couleurNew,1);//On vire le '#" si il existe en début de chaine
}
$rougeNew = hexdec(substr($couleurNew,0,2));//On sort la valeur en Base 10 de la veleur du rouge
$vertNew = hexdec(substr($couleurNew,2,2));//On sort la valeur en Base 10 de la veleur du vert
$bleuNew = hexdec(substr($couleurNew,4,2));//On sort la valeur en Base 10 de la veleur du bleu
//On change de couleur
imagecolorset($im, $couleurOrigIndex, $rougeNew, $vertNew, $bleuNew);
}
}
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
}else{
echo'image non créee..';
}
}

function img_create($n){if(!file_exists($n)){echo"pas d'image";}
[mailto:$z=@imagecreatefrompng($n $z=@imagecreatefrompng($n]);
return $z;}
?>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
J'ai pas le temps de chercher une solution plus simple mais ça me semble bien long pour ce qu'il y a à faire ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>