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

Langage PHP Discussion :

upload et redimensionnement d'image


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Points : 47
    Points
    47
    Par défaut upload et redimensionnement d'image
    J'ai un problème avec le code ci-dessous qui est un peu compliqué pour moi. Je veux charger une image jpg depuis un formulaire d'une page web, voici un extrait de cette page html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form action="transitoire/transitoire.php" NAME="saisie"  enctype="multipart/form-data" method="post">                          
      <div style="font-weight:700;">Photo 1 obligatoire. Le nom du fichier est sans importance</div>
      <input id="iph" style="background-color:#ddd;" type="file" name="photo_a_charger" size="80">
    <INPUT id="sub"  TYPE="submit" NAME="telecharger" VALUE="Enregistrer">
    En php, je veux récupérer cette image en vérifiant que c'est du jpg et que la taille est bien 1024x768, la stocker et en faire une image réduite de 160x120 que j'enregistre dans un autre sous répertoire. Voici un extrait du code :

    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
     
    $pattern =  '/(.jpg)$/i ';
    try{
      $f_tempo= $_FILES['photo_a_charger']['tmp_name'];
      $matches=preg_match($pattern, $nom_photo);  
      if($matches==1){ 
        move_uploaded_file($f_tempo,$adresse_photo);
        list($width, $height) = getimagesize($adresse_photo);
        if($width!=1024 || $height!=768) {
          echo $msg="La première photo n'a pas la taille demandée (1024x768)     mais ".$width.'x'. $height."<br>Toutes les photos sont rejetées<br>";
          if(file_exists($adresse_photo)) unlink($adresse_photo);
        }
        else{
          $newwidth = 160;
          $newheight = 120;
          $thumb = imagecreatetruecolor($newwidth, $newheight);
          $source = imagecreatefromjpeg($adresse_photo);
          imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
          imagejpeg($thumb,$adresse_photo_r);      
          echo 'traitement photo 1 OK<br>';
        }
      }
      else echo $msg="Cette photo n'est pas au format .jpg<br>Toutes les photos sont rejetées<br>La bas de données n'est pas modifiée";
    } catch(Exception $e) {echo $msg="erreur système ".$e."<br>";}
    Parfois, ça fonctionne, mais je sors souvent par une erreur de dimension, la taille de l'image téléchargée est vide.
    Merci de votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Points : 183
    Points
    183
    Par défaut
    tu ne vérifies pas le poids de l'image uploadée ?
    http://www.php.net/manual/fr/feature...n-pitfalls.php

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    Pour le moment, je n'ai pas mis de vérification de la taille du fichier. Je l'ajouterai peut être si je rencontre un problème. Je préférerais accepter n'importe quelle photo de n'importe quelle dimension et définition et ramener ces photos en 1024x768 et 72 px/". Pour la dimension, ça semble possible, pour la définition, je n'ai pas trouvé la solution et rien vu dans les fonctions GD. Y a-t'il une solution ? Alors si quelqu'un à une idée !

    En modifiant le code php comme indiqué ci-dessous, ça semble fonctionner normalement. J'ai remplacé le try/catch par un test sur la présence ou non d'une photo (dans le site réel, l'utilisateur doit pouvoir télécharger de 1 à 5 photos, d'où ce ce test) et je ne comprends pas bien pourquoi ça fonctionne maintenant :

    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
     
    $nom_photo=$_FILES['photo_a_charger']['name'];
    $pattern =  '/(.jpg)$/i ';
    if($nom_photo!=""){    
        $matches=preg_match($pattern, $nom_photo);  
        if($matches==1){
        $f_tempo= $_FILES["photo_a_charger"]["tmp_name"];
        move_uploaded_file($f_tempo,$adresse_photo); 
        list($width, $height) = getimagesize($adresse_photo);
        echo 'photo 1 '.$width.' '.$height.'<br>';
        if($width!=1024 || $height!=768) {
          echo $msg="La première photo n'a pas la taille demandée (1024x768) mais ".$width.'x'. $height."<br>Toutes les photos sont rejetées<br>";
          if(file_exists($adresse_photo)) unlink($adresse_photo);
        }
        else{
          $newwidth = 160;
          $newheight = 120;
          $thumb = imagecreatetruecolor($newwidth, $newheight);
          $source = imagecreatefromjpeg($adresse_photo);
          imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
          imagejpeg($thumb,$adresse_photo_r);      
          enregistrer_ns($nom_s,$comment_nom_s,$ind_s);
          if($nom_c!="") enregistrer_nc($nom_c,$comment_nom_c,$ind_c,$nom_s);
          enregistrer_bd($ligne_bd);
          echo 'traitement photo 1 OK<br>';
        }
      }
    }

Discussions similaires

  1. upload puis redimensionnement d'image limité à 2 Mo
    Par franckcl dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2010, 12h38
  2. [GD] Upload et redimensionnement d'images volumineuses
    Par migli dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/06/2010, 11h12
  3. Réponses: 1
    Dernier message: 18/01/2008, 16h18
  4. [Upload] Redimensionnement d'image uploader
    Par nicerico dans le forum Langage
    Réponses: 7
    Dernier message: 04/02/2007, 20h58
  5. [Upload] Redimensionner une image après upload
    Par putubudiarta dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2007, 12h32

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