snwoman49 Posté 2 Octobre 2005 Posté 2 Octobre 2005 Bonjour, Je recherche actuellement le moyen avec gd pour pouvoir changer une couleur sur l'image X par une autre couleur ou soit supprimer cette couleur de l'image Je pense et j'espère qu'en GD on devrait pouvoir,mais je n'ai pas trouvé dans doc de php,j'espère que vous pourrez m'aider. Merci d'avance. A bientôt.
MarvinLeRouge Posté 2 Octobre 2005 Posté 2 Octobre 2005 Salut, Tu peux relever la couleur d'un point dans une image (à condition bien sûr qu'elle soit en couleurs indexées). Donc ton truc est faisable (en scannant tous les points de l'image, certes, mais faisable). Fonction imagecolorat Sinon, qu'entends-tu par "supprimer une couleur" ?
snwoman49 Posté 2 Octobre 2005 Auteur Posté 2 Octobre 2005 (modifié) Si tu veux imagine que j'ai des points bleu sur l'image,je souhaite remplacer tous les pixels ou il y a de la couleur bleu par de la couleur rouge par exemple. Modifié 2 Octobre 2005 par snwoman49
snwoman49 Posté 3 Octobre 2005 Auteur Posté 3 Octobre 2005 Voilà ce que j'ai tenté de faire mais qui ne marche pas. $i = 0;$x = 1000;$yii = 1;$y = 1000;while($i != $x) { if($i == '1000') { $yii += 1; $color = imagecolorat($im, $i, $yii);//ici j'ai des if et elseif pour analyser la ou les couleur } $i++; } En fet ce que je voudrais faire c'est par exemple analyse tout d'abord quand Y = 0 et faire varier x de 0 à 200,quand x = 1000 on rajoute 1 à Y jusqu'a que Y = 1000 et là on arrête. Merci pour votre aide,à bientôt.
Duxmachine Posté 3 Octobre 2005 Posté 3 Octobre 2005 (modifié) bonjour, je vai te donner une piste sure: je pars d'une image $img // si c'est une true color, convertir en image à palette 256 avec tramageimagetruecolortopalette($img, true, 256);// boucle pour lister les 256 couleurs for( $i=0; $i<imagecolorstotal( $img ); $i++ ) {// récupération des valeurs RVB de la nuance $i $c = ImageColorsForIndex( $img, $i );// recherche des points blesu et transformation en équivalent rougeif ($c["red"]<30 && $c["green"]<30 && $c["blue"]>230) { $c["red"]=$c["blue"]; $c["blue"]=1;} // réatribution des nouvelles valeurs RVB au même index de la palette imagecolorset( $img, $i, $c["red"], $c["green"], $c["blue"] ); } Voilà, en fait c'est pas si compliqué que celà n'y parait Modifié 4 Octobre 2005 par Duxmachine
snwoman49 Posté 4 Octobre 2005 Auteur Posté 4 Octobre 2005 Merci duxmachine mais en fet j'ai trouvé la solution pour ce que je veux faire,j'ai juste un problème avec la boucle, comme expliqué plus haut. Je voudrais tout d'abord qu'on parte de y = 1 on faits 400x par exemple,quand on arrive à 400x on rajoute +1 à y et on recommence ainsi de suite jusqu'a que y = 400 par exemple.Vous voyez ce que je veux dire
Duxmachine Posté 4 Octobre 2005 Posté 4 Octobre 2005 pour une boucle dans le sens de lecture naturel: for (y=0; y<400; y++) { for (x=0; x<400; x++) { $couleur=imagecolorat($img, $x, $y); } } Et pour une lecture en sens vertical puis horizontal, inverser les 2 for()
snwoman49 Posté 5 Octobre 2005 Auteur Posté 5 Octobre 2005 Super merci Duxmachine ca marche impec !. Maintenant j'ai un autre petit problème je voudrais rendre mon image 1 transparent pour ensuite la copié sur l'image 2. $im = imagecreatefrompng('monurl.png');/////////////////////////////////////////////////////////////////////////////$blanc = imagecolorallocate($im, 255, 255, 255);imagecolortransparent($im,$blanc); Mais ca ne marche pas,l'image n'est pas transparente.
Duxmachine Posté 5 Octobre 2005 Posté 5 Octobre 2005 tu peux rendre mettre une couleur transparente à la place du blanc que je t'ai donné: imagecolorallocatealpha($im, 255, 255, 255, 127); 127 = transparence maxi.
snwoman49 Posté 6 Octobre 2005 Auteur Posté 6 Octobre 2005 Voilà ca ca marche impec encore merci! Maintenant j'ai un problème avec une autre carte que j'essaie de faire générer. <?php header ("Content-type: image/Png"); $im = imagecreatefromgif('url.gif'); $img = imagecreatefromgif('url.gif');//On définit les couleurs$audessusvingtsix = imagecolorallocate($im, 254, 0, 225);$audessusvingt = imagecolorallocate($im, 180, 0, 50);$audessusquatorze = imagecolorallocate($im, 220, 75,30);$audessushuight = imagecolorallocate($im, 254, 150, 0);$audessusdeux = imagecolorallocate($im, 254, 225, 0);$audessusmoinsquatre = imagecolorallocate($im, 0, 240, 40);$audessusmoinsdix = imagecolorallocate($im, 0, 230, 160);$audessusmoinsseize = imagecolorallocate($im, 0, 150, 254);$audessusmoinsvinght = imagecolorallocate($im, 0, 50, 254);$audessusmoinstrente = imagecolorallocate($im, 200, 0, 254);$audessusmoinstrentesix = imagecolorallocate($im,50, 0, 50);///bouclefor ($y=0; $y<650; $y+10) {for ($x=0; $x<800; $x+10) {$color = imagecolorat($img, $x, $y);if($color == '32'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "> 32", $audessusvingtsix);}elseif($color == '30'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "30", $audessusvingtsix);}elseif($color == '29'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "28", $audessusvingtsix);}elseif($color == '26'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "26", $audessusvingtsix);}elseif($color == '24'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "24", $audessusvingt);}elseif($color == '18'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "22", $audessusvingt);}elseif($color == '16'){$x /= 1.037;$y /= 1.4;imagestring($im, 2, $x, $y, "20", $audessusvingt);}elseif($color == '17'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "18", $audessusquatorze);}elseif($color == '19'){$x /= 1.037;$y /= 1.4;imagestring($im, 2, $x, $y, "16", $audessusquatorze);}elseif($color == '21'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "14", $audessusquatorze);}elseif($color == '22'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "12", $audessushuight);}elseif($color == '23'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "10", $audessushuight);}elseif($color == '33'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "8", $audessushuight);}elseif($color == '34'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "6", $audessusdeux);}elseif($color == '35'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "4", $audessusdeux);}elseif($color == '36'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "2", $audessusdeux);}elseif($color == '37'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "0", $audessusmoinsquatre);}elseif($color == '8'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-2", $audessusmoinsquatre);}elseif($color == '9'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-4", $audessusmoinsquatre);}elseif($color == '10'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-6", $audessusmoinsdix);}elseif($color == '11'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-8", $audessusmoinsdix);}elseif($color == '13'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-10", $audessusmoinsdix);}elseif($color == '15'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-12", $audessusmoinsseize);}elseif($color == '14'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-14", $audessusmoinsseize);}elseif($color == '12'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-16", $audessusmoinsseize);}elseif($color == '6'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-18", $audessusmoinsvinght);}elseif($color == '4'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-20", $audessusmoinsvinght);}elseif($color == '5'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-22", $audessusmoinsvinght);}elseif($color == '7'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-24",$audessusmoinstrente);}elseif($color == '25'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-26",$audessusmoinstrente);}elseif($color == '28'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-28",$audessusmoinstrente);}elseif($color == '31'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-30",$audessusmoinstrente);}elseif($color == '27'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-32",$audessusmoinstrente);}elseif($color == '34'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-34",$audessusmoinstrente);}elseif($color == '2'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "-36",$audessusmoinstrente);}elseif($color == '1'){$x /= 1.037;$y /= 1.4;$x = round($x,0);$y = round($y,0);imagestring($im, 2, $x, $y, "<-36",$audessusmoinstrentesix);}else{}} } imagepng($im);imagedestroy($im); ?> Et voilà le message d'erreur afficher à l'écran L'image «url.php » ne peut être affichée, car elle contient des erreurs. J'ai fait clic droit pour voir les erreurs mais ca ne m'affiche rien ! Pourtant tout mon code ) l'air bon ! J'espère que vous pourrez m'aider à bientôt.
Duxmachine Posté 6 Octobre 2005 Posté 6 Octobre 2005 2 possibilités: -soit tu as quelque chose avant le header() Si oui, retire ce qu'il y a avant -soit tu as une erreur dans le script qui retourne une message d'erreur ecrit. Dans ce cas fait un essai sans le header() pour voir ce message d'erreur
snwoman49 Posté 6 Octobre 2005 Auteur Posté 6 Octobre 2005 Voici l'erreur que ca me renvoie ! Fatal error: Maximum execution time of 10 seconds exceeded in monfichier.php on line 70 Comment faire pour executer moins de requêtes !
Duxmachine Posté 6 Octobre 2005 Posté 6 Octobre 2005 (modifié) Ton erreur n'est pas le nombre de calcul mais le formatage des boucles: à la place de for ($y=0; $y<650; $y+10) écrit for ($y=0; $y<650; $y=$y+10) pareil pour les X Tu peux alléger ton code $x=round($x/1.037);$y=round($y/1.4); Tu peux aussi te créer une petite fonction utilisateur pour éviter de tout répéter Ou utiliser switch case break switch ($color) { case 32: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "> 32", $audessusvingtsix); break; case 30: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "> 30", $audessusvingtsix); break;etc...} Modifié 6 Octobre 2005 par Duxmachine
snwoman49 Posté 6 Octobre 2005 Auteur Posté 6 Octobre 2005 Toujours ce même message d'erreur . Voici le code comme tu me l'as conseiller duxmachine <?php $im = imagecreatefromgif(''url.gif'); $img = imagecreatefromgif('url.gif');//On définit les couleurs$audessusvingtsix = imagecolorallocate($im, 254, 0, 225);$audessusvingt = imagecolorallocate($im, 180, 0, 50);$audessusquatorze = imagecolorallocate($im, 220, 75,30);$audessushuight = imagecolorallocate($im, 254, 150, 0);$audessusdeux = imagecolorallocate($im, 254, 225, 0);$audessusmoinsquatre = imagecolorallocate($im, 0, 240, 40);$audessusmoinsdix = imagecolorallocate($im, 0, 230, 160);$audessusmoinsseize = imagecolorallocate($im, 0, 150, 254);$audessusmoinsvinght = imagecolorallocate($im, 0, 50, 254);$audessusmoinstrente = imagecolorallocate($im, 200, 0, 254);$audessusmoinstrentesix = imagecolorallocate($im,50, 0, 50);///bouclefor($y=0; $y<650; $y=$y+10) {for ($x=0; $x<800; $x=$x +10) {$color = imagecolorat($img, $x, $y);switch ($color) {case 32: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "> 32", $audessusvingtsix); break;case 30: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "> 30", $audessusvingtsix); break;case 23: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "28", $audessusvingtsix); break;case 26: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "26", $audessusvingtsix); break;case 24: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "24", $audessusvingt); break;case 18: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "22", $audessusvingt); break;case 16: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "20", $audessusvingt); break;case 17: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"18", $audessusquatorze); break;case 19: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"16", $audessusquatorze); break;case 21: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"14", $audessusquatorze); break;case 22: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"12", $audessushuight); break;case 23: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"10", $audessushuight); break;case 33: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"8", $audessushuight); break;case 34: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y,"6", $audessusdeux); break;case 35: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "4", $audessusdeux); break;case 36: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "2", $audessusdeux); break;case 37: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "0", $audessusmoinsquatre); break;case 8: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-2", $audessusmoinsquatre); break;case 9: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-4", $audessusmoinsquatre); break;case 10: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-6", $audessusmoinsdix); break;case 11: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-8", $audessusmoinsdix); break;case 13: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-10", $audessusmoinsdix); break;case 15: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-12", $audessusmoinsseize); break;case 14: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-14", $audessusmoinsseize); break;case 12: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-16", $audessusmoinsseize); break;case 6: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-18", $audessusmoinsvinght); break;case 4: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-20", $audessusmoinsvinght); break;case 5: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-22", $audessusmoinsvinght); break;case 7: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-24",$audessusmoinstrente); break;case 25: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-26",$audessusmoinstrente); break;case 28: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-28",$audessusmoinstrente); break;case 31: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-30",$audessusmoinstrente); break;case 27: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-32",$audessusmoinstrente); break;case 34: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-34",$audessusmoinstrente); break;case 2: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "-36",$audessusmoinstrente); break;case 1: $x=round($x/1.037); $y=round($y/1.4); imagestring($im, 2, $x, $y, "<-36",$audessusmoinstrentesix); break;} } } imagepng($im);imagedestroy($im); ?>
Duxmachine Posté 6 Octobre 2005 Posté 6 Octobre 2005 lol, je viens de voir l'erreur récurente: il faut choisir un autre nom de variable dans les switch car $x et $y sont déjà utilisés par les boucles. je les remplace par $x2 et $y2 case 32: $x2=round($x/1.037); $y2=round($y/1.4); imagestring($im, 2, $x2, $y2, "> 32", $audessusvingtsix); break; C'est tout bête mais c'est une erreur d'inattention qui arrive souvent
snwoman49 Posté 6 Octobre 2005 Auteur Posté 6 Octobre 2005 (modifié) yes merci ca marche impec. Super Duxmachine Un autre truc que j'aimerais savoir s'il est possible de faire est de partir des bords de l'image donc de 0 et après fait le +10 par exemple Modifié 6 Octobre 2005 par snwoman49
Duxmachine Posté 6 Octobre 2005 Posté 6 Octobre 2005 tes boucles le font déjà, elles partent de (0,0)
snwoman49 Posté 6 Octobre 2005 Auteur Posté 6 Octobre 2005 (modifié) J'ai un problème avec Gd est les imagecolorat qui me servent à récupèrer l'index de la couleur et d'ensuite utiliser cette couleur pour mettre sur mon image,cet index est récupèrer sur une autre image qui est ensuite copié sur une image vide avec ce script. $img1 = imagecreatefromgif('url.gif'); $img = imagecreate(787,539); imagecopy ($img, $img1, 0, 0, 3, 55, 787, 539 ); Devrais je utiliser imagecreatetruecolor ? Merci pour vos réponses,amicalement. Pour Duxmachine c'est le même code que au dessus Ca c'est une partie avant Modifié 6 Octobre 2005 par snwoman49
Duxmachine Posté 6 Octobre 2005 Posté 6 Octobre 2005 soit plus clair car je vois pas de imagecolorat dans ton code
snwoman49 Posté 6 Octobre 2005 Auteur Posté 6 Octobre 2005 Voilà je viens de tester en mettant l'image avec imagecreatetruecolor et ca marche. Ca donne des index avec énormément de chiffres mais ca marche. Bonne soirée et encore merci Duxmachine.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant