Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/06/2011, 12h09   #1
Futur Membre du Club
 
Inscription : mai 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 61
Points : 15
Points : 15
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 :
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 :
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
tim1789 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2011, 20h11   #2
Membre régulier
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 72
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 72
Points : 99
Points : 99
tu ne vérifies pas le poids de l'image uploadée ?
http://www.php.net/manual/fr/feature...n-pitfalls.php
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h52   #3
Futur Membre du Club
 
Inscription : mai 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 61
Points : 15
Points : 15
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 :
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>';
    }
  }
}
tim1789 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h19.


 
 
 
 
Partenaires

Hébergement Web