xorban Posté 24 Mai 2006 Posté 24 Mai 2006 salut a tous le monde j'ai un peutit probleme, en fait je sait pas comment adapter la solution de ce post pour mes besoins. j'explique ce que je veux faire: j'ai un dossier avec plus de 20 images (png) de ce type exactement la meme forme de l'image, mais y a que les motifs qui changent. je veux pouvoir, garder la transparence des mes images et changer juste la couleur des motifs, dans tous les images (quelque soit le motif) le resultat doit etre utilisable sur plusieurs pages, donc soit enregistré les images cree sur le serveur et repertorier son nom dans la bdd ou ....je vois pas autre solutions. merci de m'aider a resoudre ce probleme. cordiallement
Duxmachine Posté 24 Mai 2006 Posté 24 Mai 2006 slt il faut tout d'abord créer une image en couleurs indexées imagecreate() qui sera enregistrée en PNG pour la transparence ensuite tu ouvre ton ecusson et tu le colle dedans avec imagecopyresized ou resampled Si tu veux changer une couleur utilises imagefill() tout ca est visible sur http://fr.php.net/image
xorban Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 est il possible de traiter les images par lots ? tu veux bien me fair un exemple ici, parceque la jy arrive pas. merci
Duxmachine Posté 24 Mai 2006 Posté 24 Mai 2006 je peux pas te faire une exemple complet car je n'ai pas tt les éléments du problème. Pour créer une image: $img = imagecreatefromgif("chemin_du_fichier.gif");$fond = imagecoloralocatealpha($img, 1,1,1,127); // 127 ou 1 me rapelle plus pour le transparent$rouge= imagecoloralocate($img, 255,1,1); // couleur rougeimagefille($img, 50 , 50 , $rouge);imagepng("nouveau_fichier.png"); Pas testé, à partir de ce code, fais tes tests, c'est le meilleur moyen d'apprendre
xorban Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 merci de quelle éléments tu probleme tu parle ? que veux tu savoir exactement, parceque j'ai mis tous les éléments du problemes dans le premier message. pour la transp c'est le 127 ( max). merci je fait les testes.
Duxmachine Posté 24 Mai 2006 Posté 24 Mai 2006 j'ai un dossier avec plus de 20 images (png) de ce type user posted image exactement la meme forme de l'image, mais y a que les motifs qui changent. je veux pouvoir, garder la transparence des mes images et changer juste la couleur des motifs, dans tous les images (quelque soit le motif) c'est pas clair: si je résume en 4x plus court: tu as des images PNG identiques sauf le motif et tu veux toutes les réenregistrer avec une autre couleur. correct? si oui ,le script est bon sauf imagecreatefromgif à remplacer par imagecreatefrompng
xorban Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 c'est axacte voila ce queje vien de faire <?header('Content-type: image/png');$img = imagecreatefrompng("barre.png");$fond = imagecolorallocatealpha($img, 1,1,1,127); // 127 ou 1 me rapelle plus pour le transparent$rouge= imagecolorallocate($img, 255,1,1); // couleur rougeimagefille($img, 50 , 50 , $rouge);imagepng("teste5.png");imagepng($img);imagedestroy($img);?> mais j'ai une erreur L'image http://....../gd.php ne peut être affichée car elle contient des erreurs.
Duxmachine Posté 24 Mai 2006 Posté 24 Mai 2006 imagepng("teste5.png"); remplcer par imagepng($img, "teste5.png");
xorban Posté 24 Mai 2006 Auteur Posté 24 Mai 2006 tj la meme erreur. masi quand je vire le header. j'ai cette erreur: Fatal error: Call to undefined function: imagefille() in exo\gd.php on line 10. si non meme avec le header , j'ai la meme erreur (image ne peux etre affichée.... si t'est encord la vien sur le chat sa evitra de polulé le forum
Duxmachine Posté 24 Mai 2006 Posté 24 Mai 2006 ma faute, c'est peut etre imagefill() et non imagefille()
xorban Posté 25 Mai 2006 Auteur Posté 25 Mai 2006 ca marche trés bien. comment pius je faire pour traité les images d'un dossier? et les enregistré dans un autre? merci
Duxmachine Posté 25 Mai 2006 Posté 25 Mai 2006 il faut que tu listes tout le dossier avec une boucle $dir = opendir("ton dossier"); while ( ($file = readdir($dir) ) !== false ) if ($file{0} !== "." ) $tab_img[] = $file; closedir($dir); // La tu as un tableau $tab_img avec les noms de fichiers foreach( $tab_img as $fichier ) { $img = imagecreatefrompng("chemin dossier/" . $fichier ); // Suite du code pour retravailler l'image // enregistre dans le dossier imagepng($img, "nouveau dossier/" .$fichier); }
xorban Posté 25 Mai 2006 Auteur Posté 25 Mai 2006 je vien de mettre ca , mais sa ne marche pas. <?phpheader('Content-type: image/png');$dir = opendir("bleu/");while ( ($file = readdir($dir) ) !== false ) if ($file{0} !== "." ) $tab_img[] = $file;closedir($dir);foreach( $tab_img as $fichier ) {$img = imagecreatefrompng("bleu/" . $fichier );$fond = imagecolorallocatealpha($img, 1,1,1,127);$rouge= imagecolorallocate($img, 255,1,1); imagefill($img, 50 , 100 , $rouge);imagepng($img, "nouveau dossier/" .$fichier);imagepng($img);imagedestroy($img);}?> ca me fait , l'image ne peut etre affichée car elle contient des erreurs
Duxmachine Posté 25 Mai 2006 Posté 25 Mai 2006 retire le header() et le imagepng($img); ils servent pour faire passer un fichier php comme une image alors que le script li doit seulement faire un travail sur les images sans les afficher et la boucle foreach avec le imagepng($img); envoie plusieurs images à la file vers le navigateur donc : BUG
xorban Posté 26 Mai 2006 Auteur Posté 26 Mai 2006 vue que les position x et y change selon les images , cette methode ne fonctionne pas correctement. y a t'il une autre methode , si oui , comment comment utilisé la methode avec get_pixel() et set_pixel() pour les image d'un dossier. merci
Duxmachine Posté 26 Mai 2006 Posté 26 Mai 2006 beh tu peux pas demander à un ordinateur de trouver une couleur dans une image dont tu ne lui précise rien. Il doit savoir soit: 1) soit l'emplacement d'un des pixels de cette couleur 2) soit la couleur à modifier Mais si ce n'est pas la même couleur pour chaque image, c'est le problème
xorban Posté 26 Mai 2006 Auteur Posté 26 Mai 2006 1) soit l'emplacement d'un des pixels de cette couleur2) soit la couleur à modifier Mais si ce n'est pas la même couleur pour chaque image, c'est le problème en fait, c'est sur tous le N° 2 a chaque fois, y a une seul couleur a modifier,et c'est la meme pour les images d'un dossier. chaque image , ce compose d'une partie (transparent) et une autre ( forme avec couleur) bleu pour le prmier teste.
Duxmachine Posté 26 Mai 2006 Posté 26 Mai 2006 donc si on prend par l'absurde, il faudrait détecter ce qui n'est pas transparent pour trouver la couleur?
xorban Posté 26 Mai 2006 Auteur Posté 26 Mai 2006 (modifié) si techniquement possible oui. oubien declarer la couleur a changer, puis la detecter , ensuite la changer. Modifié 26 Mai 2006 par xorban
Duxmachine Posté 27 Mai 2006 Posté 27 Mai 2006 désolé j'ai pas trop le temps de faire des scripts en ce moment mais je t'ai trouvé cette solution qui me parait tout à fait adapté this is helpful if you would like to implement a color theme system in your website... try it outDavide Candiloro Italyfunction colorize ($pngpath, $r, $g, $b)/*REQUIRES: $pngpath to be a valid path of a greyscale PNG-8 image with 64 colors palette $r, $g, $b to be integers in the range 0..255EFFECTS: returns the png image colorized with the color represented by $r, $g, $b.*/{ header("Content-type: image/png"); $im = imagecreatefrompng("images/table.png"); imagetruecolortopalette($im, FALSE, 256); for ($c = 0; $c < 64; $c++){ /*64 is the number of colors in the PNG-8 palette*/ $col = imagecolorsforindex($im, $c); imagecolorset ( $im, $c, $r*$col['red']/256, $g*$col['green']/256, $b*$col['blue']/256); /*replaces original greyscale palette with a colorized one*/ } imagepng($im); imagedestroy($im);} http://fr.php.net/manual/fr/function.imagecolorset.php
xorban Posté 27 Mai 2006 Auteur Posté 27 Mai 2006 oulla, peux tu me l'expliqué ? d'est que taun peux de temps pour coder le script meme si c'est d'ici 15 jours. merci encore
Duxmachine Posté 27 Mai 2006 Posté 27 Mai 2006 il faut recopier cette fonction dans ton script et faire attention, il me semble qu'il y ai une erreur pas grave. le $pngpath ne sert à rien pour ouvrir une image $im = imagecreatefrompng("images/table.png"); replace 64 par 128 pour etre sur que ca marche for ($c = 0; $c < 64; $c++) $col = imagecolorsforindex($im, $c); récupère la couleur de la palette imagecolorset ( $im, $c, $r*$col['red']/256, $g*$col['green']/256, $b*$col['blue']/256); Modifie la couleur $c de la palette de l'image $im par les valuers rouge vert bleu que tu veux. C'est ici qu'il faut définir ta nouvelle couleur ex: rouge= imagecolorset ( $im, $c, 128, 1 , 1); Vert= imagecolorset ( $im, $c, 1, 128 , 1); Bleu= imagecolorset ( $im, $c, 1, 1 , 128); Orange= imagecolorset ( $im, $c, 128, 80 , 30); Jaune imagecolorset ( $im, $c, 128, 128 , 1); Turquoise imagecolorset ( $im, $c, 1, 100 , 128); etc...
xorban Posté 27 Mai 2006 Auteur Posté 27 Mai 2006 voila ce que je vien de faire <?phpfunction colorize ($pngpath, $r, $g, $b)/*REQUIRES: $pngpath to be a valid path of a greyscale PNG-8 image with 64 colors palette $r, $g, $b to be integers in the range 0..255EFFECTS: returns the png image colorized with the color represented by $r, $g, $b.*/$dir = opendir("bleu/");while ( ($file = readdir($dir) ) !== false ) if ($file{0} !== "." ) $tab_img[] = $file;closedir($dir);// La tu as un tableau $tab_img avec les noms de fichiersforeach( $tab_img as $fichier ) { header("Content-type: image/png"); $im = imagecreatefrompng("bleu/" . $fichier ); imagetruecolortopalette($im, FALSE, 256); for ($c = 0; $c < 128; $c++){ /*64 is the number of colors in the PNG-8 palette*/ $col = imagecolorsforindex($im, $c); //imagecolorset ( $im, $c, $r*$col['red']/256, $g*$col['green']/256, $b*$col['blue']/256); /*replaces original greyscale palette with a colorized one*/ imagecolorset ( $im, $c, 1, 128 , 1); } imagepng($im, "bleu/" .$fichier); imagedestroy($im);}?> est ce corretce
Duxmachine Posté 27 Mai 2006 Posté 27 Mai 2006 retire le header si tu veux réenregistrer le fichier sans l'afficher en image dynamique car il va bugger ton imagecolorset va te donner un vert vif sinon, tu dois pas etre loin de ce que tu cherches
xorban Posté 27 Mai 2006 Auteur Posté 27 Mai 2006 Parse error: parse error, expecting `'{'' in ....... sa me pointe cette ligne $dir = opendir('bleu/'); je trouve pas ce qui cloche lol
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant