Aller au contenu

Sujets conseillés

Posté

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 barre.png 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

Posté

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

Posté

est il possible de traiter les images par lots ?

tu veux bien me fair un exemple ici,

parceque la jy arrive pas.

merci

Posté

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 rouge
imagefille($img, 50 , 50 , $rouge);
imagepng("nouveau_fichier.png");

Pas testé, à partir de ce code, fais tes tests, c'est le meilleur moyen d'apprendre

Posté

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.

Posté
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

Posté

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 rouge
imagefille($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.

Posté

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

Posté

ca marche trés bien.

comment pius je faire pour traité les images d'un dossier?

et les enregistré dans un autre?

merci

Posté

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);

}

Posté

je vien de mettre ca , mais sa ne marche pas.

<?php
header('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

Posté

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

Posté

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

Posté

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

Posté
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

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.

Posté (modifié)

si techniquement possible oui.

oubien declarer la couleur a changer, puis la detecter , ensuite la changer.

Modifié par xorban
Posté

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 out
Davide Candiloro Italy

function 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..255
EFFECTS: 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

Posté

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

Posté

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...

Posté

voila ce que je vien de faire

<?php
function 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..255
EFFECTS: 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 fichiers

foreach( $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

Posté

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

Posté

Parse error: parse error, expecting `'{'' in .......

sa me pointe cette ligne

$dir = opendir('bleu/');

je trouve pas ce qui cloche lol

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...