Auteur Sujet: Upload D'images Jpg  (Lu 5976 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« le: 27 juin 2003 à 15:59:41 »
Je souhaiterais que les utilisateurs de ma bdd puissent charger ponctuellement, cad le temps d'un traitement, un scan de fonds de carte en jpg de 150Ko. Le traitement consisterait à positionner des points sur la carte. Il est bien sûr hors de question que chacun stocke sa collection de cartes sur le serveur.
Alors dites moi :
- si la chose vous paraît possible
- et si oui de quelle façon?
Merci de vos réponses.
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne spontex

  • Connaisseur
  • ***
  • Messages: 262
    • http://dvdtoile.com
Upload D'images Jpg
« Réponse #1 le: 27 juin 2003 à 16:42:48 »
Salut,

Je fais quelque chose qui ressemble fort à ça, sur DvdToile : les membres de la rédac' peuvent uploader des images, soit d'autres sites, soit de leur disque dur, et après upload, elles sont redimensionnées à la bonne taille, puis placées sur le site.
Pour ton besoin, il te faut une page "formulaire" avec un champ de saisie de fichier (qui offre un bouton Parcourir), et, quand tu valides, ça appelle un script PHP, qui vérifie que le fichier passé est bien un JPG, au bon format, qui fait le traitement (fonction graphique ? use the GDLib !), puis place l'image dans un répertoire donné. On renvoie alors l'utilisateur vers une page qui affiche cette fameuse image, d'où il peut la télécharger, puis l'effacer.
Pour les ptits malins qui n'effaceraient pas leur image : à chaque insertion de nouvelle image, on vérifie le contenu du répertoire, et on efface les "vieilles" images (vieilles étant à définir).

A+, n'hésite pas si tu te poses des questions.
spontex@dvdtoile.com
dvdtoile.com : Toutes les sorties au cinema et en DVD.

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #2 le: 27 juin 2003 à 19:04:26 »
Merci Spontex de ta réponse,

- OK pour le champ de saisie de fichier avec bouton Parcourir,
- comment vérifier le format du fichier, je suppose qu'il doit exister des fonctions idoines,
- pour ce qui concerne le traitement,
j'ai 2 tables, une table 'images' qui contient la description de l'image,
et une table 'points' qui stocke les x et y des points à positionner sur l'image...mais je ne connais pas GDLib :(
- place l'image dans un répertoire donné: cela veut-il dire qu'il me faudra 1 répertoire par utilisateur?
- OK pour le reste.
 
« Modifié: 27 juin 2003 à 19:10:22 par Mikado »
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne GUiW

  • Débutant
  • *
  • Messages: 11
    • http://www.hounsi.com
Upload D'images Jpg
« Réponse #3 le: 28 juin 2003 à 11:24:21 »
Mikado, tu trouveras à cette adresse un script d'upload plutot complet, de quoi t'inspirer donc :).


http://www.phpapps.org/index.php?action=so...r_source&id=167
 
[size=8]
Hounsi : Melting Groove from Angers (49)
www.hounsi.com
guiw@hounsi.com
[/size]

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #4 le: 29 juin 2003 à 10:50:16 »
Merci GUIW, ça va bien m'aider. J'ai même trouvé un script de redimensionnement d'image fort intéressant.
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne spontex

  • Connaisseur
  • ***
  • Messages: 262
    • http://dvdtoile.com
Upload D'images Jpg
« Réponse #5 le: 30 juin 2003 à 11:23:29 »
Citer
Merci Spontex de ta réponse,

- OK pour le champ de saisie de fichier avec bouton Parcourir,
- comment vérifier le format du fichier, je suppose qu'il doit exister des fonctions idoines,
- pour ce qui concerne le traitement,
j'ai 2 tables, une table 'images' qui contient la description de l'image,
et une table 'points' qui stocke les x et y des points à positionner sur l'image...mais je ne connais pas GDLib :(
- place l'image dans un répertoire donné: cela veut-il dire qu'il me faudra 1 répertoire par utilisateur?
- OK pour le reste.
- Pour vérifier le format de fichier, il y a sûrement une fonction toute faite, mais :
if (strtolower(substr($imgfile, -3)) == 'jpg')
marche très bien.

- La GDLib fait partie du langage PHP ... donc plus aucune excuse maintenant :-) Pour placer tes points dessus tu peux utiliser par exemple : imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color) qui, avec w=h, te donnera de petits cercles en (cx, cy).

- Non, pour resizer ton image tu utilises juste :
imagecopyresampled($vignette, $image,0,0, 0,0, $nouvelle_largeur, $nouvelle_hauteur,$largeur,$hauteur);
(où $image désigne ton image d'origine, et $vignette ton image redimensionnée)

Et pour l'enregistrer là où tu veux :

ImageJpeg($vignette, "$uploaddir/$id.jpg", 90); pour une qualité de 90%. C'est toi qui la mets où tu veux.

A+
 
spontex@dvdtoile.com
dvdtoile.com : Toutes les sorties au cinema et en DVD.

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #6 le: 30 juin 2003 à 14:11:07 »
Merci Spontex!
Lorsque je teste Imagefilledellipse EasyPhp1.6 me réclame GD2. Je suis donc allé sur boutell.com récupérer gd-2.0.8.zip.
Avant de faire une c....rie, comment doit on s'y prendre pour faire l'update?
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne spontex

  • Connaisseur
  • ***
  • Messages: 262
    • http://dvdtoile.com
Upload D'images Jpg
« Réponse #7 le: 30 juin 2003 à 14:21:07 »
Je t'avoue que je n'utilise pas EasyPHP, je fais tout directement "en ligne" :-)
Mais la GD est désormais incluse dans le langage PHP, tu n'as donc plus à installer la GDLib séparément, normalement. L'inconvénient d'Easy PHP, c'est que tu n'as pas la même version que sur PhpNet ! On est en PHP 4.2.2 alors qu'EasyPHP 1.6 offre PHP 4.2.0 :-)

Mais c'est bizarre tout ça, imagefilledellipse est apparue en PHP 4.0.6, tu devrais donc l'avoir dans EasyPHP 1.6...  :(  
« Modifié: 30 juin 2003 à 14:22:49 par spontex »
spontex@dvdtoile.com
dvdtoile.com : Toutes les sorties au cinema et en DVD.

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #8 le: 30 juin 2003 à 23:58:47 »
Tout fonctionne bien (test du format, upload OK) sauf à la dernière étape...
- mon image 600x800 est affichée à l'écran
- dans ma fonction, pour remplacer imagefilledellipse, j'ai testé ceci :
...
$x .= imagerectangle ($im, 300, 400, 500, 500, 'red');
return $x;

...aucune erreur ($x renvoie 1) mais le rectangle rouge est invisible...damned :angry:

Quelqu'un a une idée? (j'utilise EasyPHP1.6).
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne spontex

  • Connaisseur
  • ***
  • Messages: 262
    • http://dvdtoile.com
Upload D'images Jpg
« Réponse #9 le: 01 juillet 2003 à 10:20:25 »
Oui,

'red' ce n'est pas bon : fais un

$red = ImageColorAllocate($im, 255, 0, 0);
puis : $x .= imagerectangle ($im, 300, 400, 500, 500, $red);

Et n'oublie pas que là, tu n'auras que le contour ! Utilise imagefilledrectangle pour avoir également l'intérieur du rectangle. Bon courage....
spontex@dvdtoile.com
dvdtoile.com : Toutes les sorties au cinema et en DVD.

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #10 le: 01 juillet 2003 à 12:16:45 »
En désespoir de cause, voici ma fonction dépouillée de tous les contrôles :

Citer
    global $base,$bouton,$id,$fichier;
   $x = "";
   $x .= "<br><table align=left width='100%' border=0 bgcolor=#E4DCD2>";
   $x .= "<tr><td align=center width='100%'> ";   
   $x .= "<p1>Fichier à télécharger :</p1><input name=\"fichier\" type=\"file\" value=\"\" size=\"50\">";
   $x .= boutonImage ("./images/telech.jpg","boutonUpload", "23", "20");
   $x .= "</td></tr>";
   
   if($bouton == "boutonUpload")
   {
   $fichier = stripslashes($fichier);
   $extension = strtolower(substr($fichier, -3));
   $im = imagecreatefromjpeg($fichier);
   $in = fopen($fichier, "rb");
   $size = getimagesize($fichier);
   $large = $size[0];
   $haut = $size[1];
   $x .= "<tr><td><img src=\"$fichier\" width=$large height=$haut></td></tr></table>";   
   $red = ImageColorAllocate($im, 255, 0, 0);
   $x .= imagefilledrectangle ($im, 300, 200, 500, 500, $red);
   }//upload
   return $x;

Qu'est ce qui cloche?
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne spontex

  • Connaisseur
  • ***
  • Messages: 262
    • http://dvdtoile.com
Upload D'images Jpg
« Réponse #11 le: 01 juillet 2003 à 12:22:26 »
lol... il te manque la fin !!
$im contient bien ton image, il faut maintenant l'enregistrer !
Avec la fonction imagejpeg($im, $fichier, 90) pour une qualité de 90%.

Et tu as juste à faire : imagefilledrectangle ($im, 300, 200, 500, 500, $red);
Pas la peine de mettre le code retour dans $x !
« Modifié: 01 juillet 2003 à 12:23:24 par spontex »
spontex@dvdtoile.com
dvdtoile.com : Toutes les sorties au cinema et en DVD.

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #12 le: 01 juillet 2003 à 13:00:24 »
Effectivement ça marche mieux maintenant...hélàs car mon fond de carte est foutu!
Ce que voudrais faire c'est charger un fond de carte et dessiner mes points sur une espèce de calque, ainsi mon fond serait toujours intact.
Est-ce possible?
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------

Hors ligne spontex

  • Connaisseur
  • ***
  • Messages: 262
    • http://dvdtoile.com
Upload D'images Jpg
« Réponse #13 le: 01 juillet 2003 à 13:27:35 »
Oui, bien sûr, c'est possible !

- Soit tu enregistres l'image modifiée sous un autre nom que l'image d'origine (genre $fichier."_modified"), comme ça tu conserves les deux

- Soit tu fais un nouveau script PHP dont le but est d'afficher cette image (et donc sans l'écrire dans un fichier). Pour cela, il te faut faire un deuxième script affiche_image.php qui se chargera juste de la production de l'image :

$fichier = stripslashes($fichier);
$extension = strtolower(substr($fichier, -3));
$im = imagecreatefromjpeg($fichier);
$in = fopen($fichier, "rb");
$size = getimagesize($fichier);
$large = $size[0];
$haut = $size[1];
$red = ImageColorAllocate($im, 255, 0, 0);
imagefilledrectangle ($im, 300, 200, 500, 500, $red);
imagejpeg($im) <-- tout seul, sans nom de fichier


et ton script principal devient :


 global $base,$bouton,$id,$fichier;
$x = "";
$x .= "<br><table align=left width='100%' border=0 bgcolor=#E4DCD2>";
$x .= "<tr><td align=center width='100%'> ";
$x .= "<p1>Fichier à télécharger :</p1><input name=\"fichier\" type=\"file\" value=\"\" size=\"50\">";
$x .= boutonImage ("./images/telech.jpg","boutonUpload", "23", "20");
$x .= "</td></tr>";

if($bouton == "boutonUpload")
{
$x .= "<tr><td><img src=\"affiche_image?fichier=".urlencode($fichier)."\" width=$large height=$haut></td></tr></table>";
}

return $x;


Voilà :-)
spontex@dvdtoile.com
dvdtoile.com : Toutes les sorties au cinema et en DVD.

Hors ligne Mikado

  • Connaisseur
  • ***
  • Messages: 252
    • Chez-Godzi
Upload D'images Jpg
« Réponse #14 le: 01 juillet 2003 à 16:47:36 »
En suivant scrupuleusement tes consignes voici ce que j'obtiens :

ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀd\"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?î7€.Òr ;ŒŽŸôÐýޔ¤1™N läðGñŸÝïÏñÐĀU˜±Ž[$íW¦î§Ë´ÜÆÓÞ9`“ÿÇþC®ãÂÇ̪Œg0í]˜#‘ÿ<óüAëÅH%3nvq‘&ÝÛ¾] ã‚ÿÝÇëMHG!ÉÈ ¢.................

What is this?

 
"Il est plus facile de jouer au mikado avec des spaghettis crus qu'avec des cuits" (Philippe GELUCK).
-------------------