IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Forum] Script upload + redimensionnement image jpg


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut [Forum] Script upload + redimensionnement image jpg
    Bonjour, je viens de trouver ce script qui m'a permis d'arrêter de m'arracher les cheveux (je ne m'en sors plus avec les upload, les redimensionnements, les formats etc, je suis débutant).
    Voici le script qui permet un upload d'une image jpg et un redimensionnement en petite taille (pour un forum par exemple)
    Attention le code marche bien (je veux dire, il n'y a pas besoin de le lire en cherchant une erreur )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    <?
    if(!empty($_GET["dwn"])) {
       if(!strpos(" ".$_GET["dwn"],"..")) {
          header("content-type: application/octet-stream");
          $f = substr($_GET["dwn"],strrpos($_GET["dwn"],"/")+1);
          header("Content-Disposition: attachment; filename=".$f);
          flush();
          readfile($_GET["dwn"]);   
       }
     
    } else {
     
    function redimage($img_src,$img_dest,$dst_w,$dst_h) {
       // Lit les dimensions de l'image
       $size = GetImageSize($img_src);  
       $src_w = $size[0]; $src_h = $size[1];  
       // Teste les dimensions tenant dans la zone
       $test_h = round(($dst_w / $src_w) * $src_h);
       $test_w = round(($dst_h / $src_h) * $src_w);
       // Si Height final non précisé (0)
       if(!$dst_h) $dst_h = $test_h;
       // Sinon si Width final non précisé (0)
       elseif(!$dst_w) $dst_w = $test_w;
       // Sinon teste quel redimensionnement tient dans la zone
       elseif($test_h>$dst_h) $dst_w = $test_w;
       else $dst_h = $test_h;
     
       // La vignette existe ?
       $test = (file_exists($img_dest));
       // L'original a été modifié ?
       if($test)
          $test = (filemtime($img_dest)>filemtime($img_src));
       // Les dimensions de la vignette sont correctes ?
       if($test) {
          $size2 = GetImageSize($img_dest);
          $test = ($size2[0]==$dst_w);
          $test = ($size2[1]==$dst_h);
       }
     
       // Créer la vignette ?
       if(!$test) {
          // Crée une image vierge aux bonnes dimensions
          // $dst_im = ImageCreate($dst_w,$dst_h);
          $dst_im = ImageCreateTrueColor($dst_w,$dst_h); 
          // Copie dedans l'image initiale redimensionnée
          $src_im = ImageCreateFromJpeg($img_src);
          // ImageCopyResized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
          ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
          // Sauve la nouvelle image
          ImageJpeg($dst_im,$img_dest);
          // Détruis les tampons
          ImageDestroy($dst_im);  
          ImageDestroy($src_im);
       }
     
       // Affiche le descritif de la vignette
       echo "SRC='".$img_dest."?t=".time()."' WIDTH=".$dst_w." HEIGHT=".$dst_h;
    }
     
    // AFFICHAGE DE LA PAGE
     
    ?> <font size=3>Désignez une image .JPG</font> <i>(300 Ko max.)<br>
     
    <? // GESTION DE L'UPLOAD
     
    $rep="./"; // Répertoire de stockage (doit avoir les droits d'écriture ! CHMOD)
    $f = $rep."original.jpg"; // path du fichier original
     
    if(isset($_FILES['photo'])) {
       if($_FILES['photo']['size']>0) {
          if(strtolower(substr($_FILES['photo']['name'],-4))!=".jpg") { ?>
               <b>Ce n'était pas un .JPG !</b>
          <? } elseif (!move_uploaded_file($_FILES['photo']['tmp_name'], $f)) { ?>
               <b>Erreur d'enregistrement !</b>
          <? }
       } else { ?>
          <b>Trop gros fichier !</b>
       <? }
    }?>
             <table><FORM METHOD="POST" ENCTYPE="multipart/form-data">
                <INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE=<? echo 300*1024;?>>
                <tr><td align=center><INPUT TYPE=FILE NAME="photo"></td></tr>
                <tr><td align=center><INPUT TYPE=SUBMIT value="Générer la vignette"></td></tr>
             </FORM></table>
     
    <? // AFFICHAGE DE LA VIGNETTE ET DES INFOS
     
    $f2 = $rep."vignette.jpg"; // path de la vignette
    $largeur=150; if(!empty($_GET["largeur"])) $largeur = $_GET["largeur"];
    $hauteur=150; if(!empty($_GET["hauteur"])) $hauteur = $_GET["hauteur"];
     
       if(file_exists($f)) { ?>
     
             <table border=0 cellspacing=5 cellpadding=0><tr>
                <td>
                   <center><b>Original</b></center><br>
                   Poids : <?echo round(filesize($f)/1024)?> Ko<br>
                   Taille : <?
                      $size = GetImageSize($f);
                      echo $size[0]."x".$size[1]; ?><br>
                   <br><center>
                      <A href="vignette.php?dwn=<?echo $f?>">Télécharger</A>
                   </center>
                </td><td align=center>
                   <IMG <? redimage($f,$f2,$largeur,$hauteur)?>>
                </td><td>
                   <center><b>Vignette</b></center><br>
                   Poids : <?echo round(filesize($f2)/1024)?> Ko<br>
                   Taille : <?
                      $size = GetImageSize($f2);
                      echo $size[0]."x".$size[1]; ?><br>
                   <br><center>
                      <A href="vignette.php?dwn=<?echo $f2?>">Télécharger</A>
                   </center>
                </td>
             </tr><tr>
     
    <? // CHOIX DES DIMENSIONS DE LA VIGNETTE
    ?>
                <form><td colspan=3 align=center>
                   <table><tr>
                      <td>Largeur :</td>
                      <td><select name="largeur">
                         <?for($i=10;$i<=150;$i+=10) {
                            echo "<option";
                            if($i==$largeur) echo " SELECTED";
                            echo ">".$i."</option>\n";
                         } ?>
                      </select></td>
                      <td>Hauteur :</td>
                      <td><select name="hauteur">
                         <?for($i=10;$i<=150;$i+=10) {
                            echo "<option";
                            if($i==$hauteur) echo " SELECTED";
                            echo ">".$i."</option>\n";
                         } ?>
                      </select></td>
                      <td><input type=submit value=Modifier></td>
                </td></form>
             </tr></table>
     
       <? } ?>
     
          </td>
       </tr></table></center>
    <?
     
    } ?>
    Je ne peux vous demander de tout lire et je suis désolé de vous déranger avec ça, mais j'aimerais juste savoir un détail. Ce script ne traite que les images .jpg, serait-il possible de lui faire accepter les .gif également (et assez facilement sans tout rechanger) ou bien serait-ce une autre méthode? Je vous remercie d'avance

  2. #2
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    tu pourrais deja regarder dans le code ou il parle de jpg :
    Il y en as 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          // Copie dedans l'image initiale redimensionnée
          $src_im = ImageCreateFromJpeg($img_src);
    il charge l'image a parti de jpeg. Il faudrait donc regarder si une methode equivalente existe en PHP : http://fr.php.net/manual/fr/ref.image.php


    il y a une autre partie ou on regarde si l'image est du jpeg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          if(strtolower(substr($_FILES['photo']['name'],-4))!=".jpg") { ?>
    Il ne reste qu'a faire un "ET pas GIF" de la meme facon que le "pas JPG" ci dessus.
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Ok merci je vais tester ceci
    apparemment la fonction existe aussi pour les png et les gif tant mieux
    imagecreatefromgif
    imagecreatefromjpeg
    imagecreatefrompng

    Je vais donc essayer d'insérer ces formats
    Merci

  4. #4
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Je sais, je voulais juste que tu le decouvre.

    Dans ce genre de probleme. Essaye d'isoler ce qui te parrait changer par rapport a ce que tu as.

    La doc PHP est tres bien faites, alors il faut l'utiliser un max.

    Bonne continuation pour ton script.
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Wééééééééé ça marche merci beaucoup
    j'ai adapté pour le gif et le png en plus
    Merci beaucoup

    Par contre j'ai une dernière question, j'ai cherché le type d'image (gif, png, ou jpg) en début de script
    et là je cherche à faire le traitement en conséquence. N'y a-t-il pas moyen de faire plus court? Je trouve cela un peu bourrin comme programmation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    if(!$test) {
          // Crée une image vierge aux bonnes dimensions
          // $dst_im = ImageCreate($dst_w,$dst_h);
          $dst_im = ImageCreateTrueColor($dst_w,$dst_h); 
          // Copie dedans l'image initiale redimensionnée
          if ($type=="jpg") {$src_im = ImageCreateFromJpeg($img_src);  
    	  				  ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
    				      ImageJpeg($dst_im,$img_dest);
    				      ImageDestroy($dst_im);  
    				      ImageDestroy($src_im);}
          elseif ($type=="gif") {$src_im = ImageCreateFromgif($img_src);  
    	  				  ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
    				      Imagegif($dst_im,$img_dest);
    				      ImageDestroy($dst_im);  
    				      ImageDestroy($src_im); }
    	 elseif ($type=="png") {$src_im = ImageCreateFrompng($img_src);  
    	  				  ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
    				      Imagepng($dst_im,$img_dest);
    				      ImageDestroy($dst_im);  
    				      ImageDestroy($src_im); }
    	 else {print "Erreur de manipulation";}
       }
    Avant le code se limitait à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(!$test) {
          $dst_im = ImageCreateTrueColor($dst_w,$dst_h); 
          $src_im = ImageCreateFromJpeg($img_src);
    ($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
          ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
          ImageJpeg($dst_im,$img_dest);
          ImageDestroy($dst_im);  
          ImageDestroy($src_im);
       }

  6. #6
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Si tu pourrais mutualiser les parties communes, et faire un switch qui sera plus visible qu'un enchainement de if.
    Tu pourrais faire une fonction par exemple ou tu passe le type et qui fait juste ce que tu veux.
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Ah oui, je vais rédiger une fonction,c'est une bonne idée
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script de redimensionnement d'image à l'upload
    Par vaxi71 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/05/2016, 19h12
  2. Script de redimensionnement image et div
    Par nal dans le forum Langage
    Réponses: 0
    Dernier message: 23/05/2012, 00h15
  3. [Upload] Redimensionner image avant upload
    Par spawns dans le forum Langage
    Réponses: 3
    Dernier message: 08/05/2009, 10h16
  4. [Upload] Redimensionner image après upload
    Par leroidje dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2008, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo