Page 1 sur 1

Nom aleatoire pour image php/gd

Posté : 17 août 2008, 17:00
par Morgoth
Bonjour,
je suis en train de débuter en php en créant un générateur de texte sur image avec l'aide du php et de GD.
Je sollicite votre aide car je bloque à un étape.

Voici déjà mon code :

Code : Tout sélectionner

<?php if (isset($_GET['Position1']) && isset($_GET['Position2']) && isset($_GET['Position3']) && isset($_GET['Position4']) && isset($_GET['Position5']) && isset($_GET['Position6']) && isset($_GET['Position7']) && isset($_GET['Position8']) && isset($_GET['Position9']) && isset($_GET['Position10']) && isset($_GET['Position11'])) { header ("Content-type: image/png"); $image = imagecreatefrompng("442losange.png"); imagestring($image, 3, 25, 199, $_GET['Position1'], $blanc); imagestring($image, 3, 130, 357, $_GET['Position2'], $blanc); imagestring($image, 3, 130, 55, $_GET['Position3'], $blanc); imagestring($image, 3, 130, 156, $_GET['Position4'], $blanc); imagestring($image, 3, 130, 255, $_GET['Position5'], $blanc); imagestring($image, 3, 232, 206, $_GET['Position6'], $blanc); imagestring($image, 3, 317, 103, $_GET['Position7'], $blanc); imagestring($image, 3, 317, 303, $_GET['Position8'], $blanc); imagestring($image, 3, 511, 256, $_GET['Position9'], $blanc); imagestring($image, 3, 406, 206, $_GET['Position10'], $blanc); imagestring($image, 3, 511, 156, $_GET['Position11'], $blanc); $couleur_fond = ImageColorAllocate ($image, 255, 0, 0); imagepng ($image, 'mon_image.png'); } else { echo 'Les variables du formulaire ne sont pas déclarées.'; } ?>
Mon problème est le suivant :
Je souhaiterais créer des images tout en gardant les anciennes déjà crées.
Mais tout le problème viens du fait que l'image crée à toujours le même nom ('mon_image.png'). Donc la dernière image crée écrase la précédente.

Je suppose donc que je doit mettre une portion de code qui déterminerais un nom aléatoire à chaque image crée. Mais j'ai beau chercher, je n'arrive pas a trouver de méthode.

J'espère que vous pourrez m'aider.
Je vous remercie d'avance :wink:

Posté : 17 août 2008, 18:02
par @rthur
Bonjour,

Cadeau :
:arrow: http://fr.php.net/uniqid
imagepng ($image, 'mon_image_'.uniqid().'.png');

Posté : 17 août 2008, 23:26
par Morgoth
Génial, c'est magique,je te remercie beaucoup.
:D

Par contre, il me reste un dernier problème qui découle de celui résolu.

Quand l'utilisateur créer l'image, il n'a pas la possibilité de la réutiliser car l'adresse est de fait compliqué.

Comment faire pour, lors de la création, on puisse faire apparaître l'image bien sur pour vérifier visuellement le résultat, mais surtout un champs de texte avec l'adresse de l'image crée ?

Cela permettrait a l'utilisateur de copier/coller l'adresse pour la réutiliser ailleurs (sur site ou forum).

Posté : 18 août 2008, 00:26
par AB
En même temps si c'est pour faire du copier-coller peu importe que ce soit compliqué ou pas (cf les liens donnés par dailymotion et autres...).

Maintenant si tu veux que le nom soit plus significatif tu peux laisser au visiteur le soin de choisir le nom de son image et concaténer l'identifiant unique avec ce nom. L'adresse sera plus longue mais plus facile à trier en cas de besoin.

Posté : 18 août 2008, 00:34
par Morgoth
Je crois que je ne me suit pas bien exprimé.

J'ai une page de formulaire en plus du code plus haut, qui permet aux gens de choisir le texte a implémenter.

Quand il clique sur "valider" pour créer l'image, une page blanche s'affiche car je n'ai encore rien codé pour proposer la "récupération".

L'image est crée, est conservé dans mon ftp (cest le but) et tout fonctionne, mais l'utilisateur ne récupère rien.

Ce que je souhaiterait c'est que a ce moment la s'affiche l'adresse de l'image crée genre:
Bravo, vous avez crée votre image, vous pourrez la trouver a l'adresser suivante :
http://adresse/nom_image.png
Comme cela, il suffit juste a l'utiliosateur de copier l'adresse. Il peut ainsi la mettre sur son forum avec les balises img du forum.

Donc effectivement, que l'adresse de l'image crée soit compliqué n'est pas un probleme puisqu'il va copier/coller cet URL. Le problème, c'est qu'il faut bien qu'on la lui affiche cette URL pour la copier/coller.

Posté : 18 août 2008, 00:37
par @rthur
http://www.phpdebutant.org
http://www.siteduzero.com

:arrow: Rubrique PHP, Gestion d'un Formulaire HTML en PHP ;)

Posté : 18 août 2008, 01:02
par AB

Ce que je souhaiterait c'est que a ce moment la s'affiche l'adresse de l'image crée genre:
Bravo, vous avez crée votre image, vous pourrez la trouver a l'adresser suivante :
http://adresse/nom_image.png
Bah si ton site se situe à l'adresse http://www.monsite.net
Si ton dossier image par rapport à la racine de ton site se nomme "dossier_images"
Si ton image se nomme "mon_image.jpg"

L'adresse pour atteindre cette image sera
http://www.monsite.net/dossier_images/mon_image.jpg

Comme c'est toi qui choisi le nom de l'image, tu peux la récupérer dans une variable quand tu génère l'identifiant unique ex : $nom_image = $identifiant.'jpg';

Pour construire ton URL il te suffira donc d'écrire

$url_image = 'http://www.monsite.net/dossier_images/'.$nom_image;

echo $url_image;


Sinon les liens indiqués par @rthur sont excellents, j'ai débuté avec ces sites :wink:

Posté : 18 août 2008, 01:41
par Morgoth
Je m'excuse car je patauge un peu.
J'avoue vouloir jouer de la musique sans connaitre le solfège.


Si jamais vous avez la passience qui s'impose avec un crétin du codage, j'espère que vous pourrez être plus précis avec moi.

Je vous met en situation pour que l'on puisse mieux me préciser les choses :

Voici le module :
http://www.asmfoot.fr/darras/essai/

On rentre des noms des joueurs, on valide.

L'image est bien crée dans mon ftp, je connais personnellement l'adresse + le nom aléatoire, de ce côté, aucun problème.

Mais quand on valide, avec IE, une page blanche apparais (pour l'utilisateur) comme vous pouvez le constater.
Au final, cela ne sert a rien puisque l'utilisateur ne peut récupérer l'url de l'image, donc ne peut l'utiliser.


La page du formulaire :

Code : Tout sélectionner

<html> <head> <title>Notre page de test</title> </head> <body> Sélectionner le onze titulaire :<br /> <form action="./mon_image.php" method="get"> 1 - Gardien de But : <input type="text" name="Position1"><br /> 2 - Défenseur latéral (D) : <input type="text" name="Position2"><br /> 3 - Défenseur latéral (G) : <input type="text" name="Position3"><br /> 4 - Défenseur Central (G) ou Libéro : <input type="text" name="Position4"><br /> 5 - Défenseur central (D) ou Stoppeur : <input type="text" name="Position5"><br /> 6 - Milieu défensif : <input type="text" name="Position6"><br /> 7 - Milieu relayeur (D) : <input type="text" name="Position7"><br /> 8 - Milieu relayeur (G) : <input type="text" name="Position8"><br /> 9 - Avant-centre : <input type="text" name="Position9"><br /> 10 - Meneur de jeu : <input type="text" name="Position10"><br /> 11 - Attaquant de complément : <input type="text" name="Position11"><br /> <input type="submit" value="Voir"> </form> </body> </html>
La page de traitement d'image :

Code : Tout sélectionner

<?php if (isset($_GET['Position1']) && isset($_GET['Position2']) && isset($_GET['Position3']) && isset($_GET['Position4']) && isset($_GET['Position5']) && isset($_GET['Position6']) && isset($_GET['Position7']) && isset($_GET['Position8']) && isset($_GET['Position9']) && isset($_GET['Position10']) && isset($_GET['Position11'])) { header ("Content-type: image/png"); $image = imagecreatefrompng("442losange.png"); imagestring($image, 3, 25, 199, $_GET['Position1'], $blanc); imagestring($image, 3, 130, 357, $_GET['Position2'], $blanc); imagestring($image, 3, 130, 55, $_GET['Position3'], $blanc); imagestring($image, 3, 130, 156, $_GET['Position4'], $blanc); imagestring($image, 3, 130, 255, $_GET['Position5'], $blanc); imagestring($image, 3, 232, 206, $_GET['Position6'], $blanc); imagestring($image, 3, 317, 103, $_GET['Position7'], $blanc); imagestring($image, 3, 317, 303, $_GET['Position8'], $blanc); imagestring($image, 3, 511, 256, $_GET['Position9'], $blanc); imagestring($image, 3, 406, 206, $_GET['Position10'], $blanc); imagestring($image, 3, 511, 156, $_GET['Position11'], $blanc); $couleur_fond = ImageColorAllocate ($image, 255, 0, 0); imagejpeg ($image, 'images/442losange_'.uniqid().'.jpg'); } else { echo 'Les variables du formulaire ne sont pas déclarées.'; } ?>

Ainsi, que dois-je concrètement ajouter a ces pages pour voir apparaitre juste après avoir cliqué sur "voir" a la place de la page blanche un texte comme ceci :
Voici l'url de l'image, copiez/coller la pour l'utiliser sur le forum :
http://www.asmfoot.fr/darras/essai/imag ... e+variable aleatoire uniqid.jpg

Posté : 18 août 2008, 11:11
par @rthur
Supprime ton header(...) à mon avis il ne sert à rien.
Après ton imagejpeg(...) ajoute
echo("bla bla");
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 19 août 2008, 15:45
par Morgoth
J'ai réussis grâce à votre aide.

Je vous suis très reconnaissant. Mille merci !