redimention photo

redimention photo - PHP - Programmation

Marsh Posté le 22-01-2006 à 16:50:59    

Bonjour,  
 
J'aimerai avoir un petit conseil et un petit peu d'aide pour un script php ;)
 
je m'explique.
 
En faite, j'aimerai créer une galerie photo.
Pour le moment, je script que j'ai upload l'image d'origine et créer une miniature avec les hauteur et largeur prédéfinie et donc ayant pas les mêmes proportions ...
Jusque là, pas de problèmes.
 
Mais le problème est que l'image d'origine est parfoit très grande 1mo ...
 
Y-a-il pas moyens de ne pas uploader l'images d'origine (1Mo) mais d'uploader a la place cette image une redimention.
Les critères de cette redimention sont : Qu'elle ait maximum 600px de hauteur et que la largeur soie proportionelle à ces 600px. Aussi, l'image d'origine peut être eplus petite que 600px donc, il faut redimentionner que si l'image est plus grande que 600px.
 
Me suivez-vous ?
 
Donc sur le ftp, j'aurais 2 img.
 
La mini (140*120)
et la redimention de celle d'origine (?*600)
 
Voici le script d'upload tel qu'il est maintenant :  
 

Code :
  1. <?
  2. if(isset($_POST['idDel']) AND $_POST['idDel'] != null)
  3. {
  4.  require('conf.php');
  5.  mysql_connect($server, $log, $pass);
  6.  mysql_select_db($db);
  7.  $requete = mysql_query('SELECT * FROM photos_maman WHERE id = \''.$_POST['idDel'].'\'');
  8.  $list = mysql_fetch_array($requete);
  9.  unlink($list['nom']);
  10.  unlink('mini_'.$list['nom']);
  11.  mysql_query('DELETE FROM photos_maman WHERE id = \''.$_POST['idDel'].'\'');
  12.  ?>
  13.  <script language="JavaScript">
  14.         alert("L'image a correctement été suprimée." );
  15.  document.location.href="./ajoutPhoto1.php"
  16.         </script>
  17.  <?
  18. }
  19. if(isset($_POST['idCom']) AND $_POST['idCom'] != null AND isset($_POST['commentaire'])){
  20.  require('conf.php');
  21.  mysql_connect($server, $log, $pass);
  22.  mysql_select_db($db);
  23.  mysql_query('UPDATE photos_maman SET commentaire = \''.addslashes($_POST['commentaire']).'\' WHERE id = \''.$_POST['idCom'].'\'');
  24.  ?>
  25.  <script language="JavaScript">
  26.         alert("Le commentaire a correctement été modifié." );
  27.  document.location.href="./ajoutPhoto1.php"
  28.         </script>
  29.  <?
  30. }
  31. if($userfile != NULL)
  32. {
  33.     $fichier = "$userfile_name";
  34. $tab = split('[/\]',$fichier);
  35. $nb = count($tab) - 1;
  36. $fichier = $tab[$nb];
  37. require('conf.php');
  38. mysql_connect($server, $log, $pass);
  39. mysql_select_db($db);
  40. $requete = mysql_query('SELECT COUNT(*) AS nbPhoto FROM photos_maman WHERE nom = \''.$fichier.'\'');
  41. $list = mysql_fetch_array($requete);
  42. //Up seulement du JPG
  43. if(!preg_match('!\.php!', $fichier))
  44.  {
  45.   if($list['nbPhoto'] == 0)
  46.    {
  47.  if(strlen($userfile_name) && file_exists($userfile) && stristr($userfile_name, ".php" ) == "" )
  48.   {
  49.    if(!copy($userfile, $userfile_name))  echo "<script language='javascript'>alert('une erreur s'est produite pendant le téléchargement.');</script>";
  50.      // un peu de nettoyage peut faire du bien, "des coups que..."
  51.    if(file_exists($userfile))
  52.    unlink($userfile);
  53.          }
  54.   mysql_query('INSERT INTO photos_maman VALUES(\'\', \''.$fichier.'\', \''.$_POST['commentaire'].'\',\'1\')');
  55.   //On creer la miniature
  56.    $sourcee = imagecreatefromjpeg($fichier); // La photo est la source
  57.    $destinationn = imagecreatetruecolor(140, 120); // On crée la miniature vide
  58.    // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
  59.    $largeur_source = imagesx($sourcee);
  60.    $hauteur_source = imagesy($sourcee);
  61.    $largeur_destination = imagesx($destinationn);
  62.    $hauteur_destination = imagesy($destinationn);
  63.    // On crée la miniature
  64.    imagecopyresampled($destinationn, $sourcee, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
  65.    // On enregistre la miniature
  66.    imagejpeg($destinationn, 'mini_'.$fichier);
  67.   ?>
  68.   <script language="JavaScript">
  69.     alert("L'image a correctement été rajoutée." );
  70.    document.location.href="./ajoutPhoto1.php"
  71.     </script>
  72.   <?
  73.  }
  74.  else
  75.  {
  76.    ?>
  77.   <script language="JavaScript">
  78.     alert("Cette image existe déjà ou a le même nom qu'une autre image." );
  79.    document.location.href="./ajoutPhoto1.php"
  80.     </script>
  81.   <?
  82.  }
  83. }
  84. exit();
  85. mysql_close();
  86. }
  87.  }
  88.  ?>


 
Merci d'avance à ceux qui m'aideront ;)
 
++

Reply

Marsh Posté le 22-01-2006 à 16:50:59   

Reply

Marsh Posté le 22-01-2006 à 16:53:20    

Ben si l'image source est trop grande tu crées deux sous-images (une "réduite" et une "miniature" ) et tu stockes pas l'image uploadée à l'origine, mais la réduite [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-01-2006 à 16:54:41    

Je ne comprends pas vraiment ton soucis.
Tu reprends le même script que pour créer ta miniature, mais tu fais :

Code :
  1. if (imagesy($monimage)>600) {
  2. BlablablibloRedimentionne;
  3. }


Reply

Marsh Posté le 22-01-2006 à 16:55:33    

oui ! c'est ce que je veux faire mais je ne sais comment faire pour redimentionner une image en gardant les prop et en présisant la hauteur de celle-ci ;)

Reply

Marsh Posté le 22-01-2006 à 16:56:34    

oui mais avec imagecreatetruecolor(140, 120);  , ca peut pas marcher ...
 
Il doit y avoir un autre fonction pour faire genr  : imagecreatetruecolor(?, 600);  


Message édité par osi le 22-01-2006 à 16:57:31
Reply

Marsh Posté le 22-01-2006 à 16:56:55    

osi a écrit :

oui ! c'est ce que je veux faire mais je ne sais comment faire pour redimentionner une image en gardant les prop et en présisant la hauteur de celle-ci ;)


T'as la hauteur et la largeur de l'image source, t'as la hauteur et la largeur maximales de l'image de destination, l'opération à effectuer s'apparente fortement à une rêgle de 3 [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-01-2006 à 16:59:43    

ben oui ... je dis pas que c'est sorcier à faire mais je dis que je ne sais pas comment faire cette redimention ...

Reply

Marsh Posté le 22-01-2006 à 17:03:42    

De la même manière que tu crées ta miniature nom de dieu, avec imagecopyresampled par exemple [:pingouino]


Message édité par masklinn le 22-01-2006 à 17:03:54

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-01-2006 à 17:12:55    

Je suis désolé que je ne comprenne pas ...
 
là ou je cale est que quand on fait la miniature, on connait la hauteur et la largeur tandis que ici, on ne connait que la hauteur.
 
hors ici :  imagecreatetruecolor(140, 120);  je dois bien mêtre les 2 valeur dont un qui est 600 mais l'autre ??? :o:o:o

Reply

Marsh Posté le 22-01-2006 à 17:21:53    

osi a écrit :

Je suis désolé que je ne comprenne pas ...
 
là ou je cale est que quand on fait la miniature, on connait la hauteur et la largeur tandis que ici, on ne connait que la hauteur.
 
hors ici :  imagecreatetruecolor(140, 120);  je dois bien mêtre les 2 valeur dont un qui est 600 mais l'autre ??? :o:o:o


 [:el g]  
 
Ton image a une hauteur a et une largeur b que  tu connais...
 
Ton image de destination a une hauteur de 600 que tu connais également.
 
Tu veux calculer la largeur de l'image de destination...
 
C'est un putain de produit en croix quoi, ça doit se faire au collège ce genre de conneries [:moule_bite]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-01-2006 à 17:21:53   

Reply

Marsh Posté le 22-01-2006 à 17:56:26    

voila ... je crois que c'est bon :  
 

Code :
  1. $sourcee = imagecreatefromjpeg($fichier);
  2. $hauteur_source = imagesy($sourcee);
  3. if($hauteur_sourcee>600)
  4. {
  5.   $sourcee = imagecreatefromjpeg($fichier);
  6.   $largeur_source = imagesx($sourcee);
  7.   $i = $hauteur_source/600
  8.   $destinationnn = imagecreatetruecolor($i, 600);
  9.   imagecopyresampled($destinationnn, $sourcee, 0, 0, 0, 0, $i, 600, $largeur_source, $hauteur_source);
  10.   imagejpeg($destinationnn, 'moy_'.$fichier);
  11. }
  12. else
  13. {
  14.   $sourcee = imagecreatefromjpeg($fichier);
  15.   $largeur_source = imagesx($sourcee);
  16.   $destinationn = imagecreatetruecolor(140, 120);
  17.   $largeur_destination = imagesx($destinationn);
  18.   $hauteur_destination = imagesy($destinationn);
  19.   imagecopyresampled($destinationn, $sourcee, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
  20.   imagejpeg($destinationn, 'mini_'.$fichier);
  21. }


 
c'est bon ? :s  :pt1cable:

Reply

Marsh Posté le 22-01-2006 à 18:03:20    

ca marche sauf que à la place de redimentionner 600px de hauteur, ca met 675 ... :s

Reply

Marsh Posté le 22-01-2006 à 18:26:19    

Code :
  1. $sourcee = imagecreatefromjpeg($fichier);
  2. $largeur_source = imagesx($sourcee);
  3. $hauteur_source = imagesy($sourcee);
  4. $newLargeur = ceil($largeur_source*(600/$hauteur_source));
  5. $destinationnn = imagecreatetruecolor($newLargeur, 600);
  6. imagecopyresampled($destinationnn, $sourcee, 0, 0, 0, 0, $newLargeur, 600, $largeur_source, $hauteur_source);
  7. imagejpeg($destinationnn, 'moy_'.$fichier);


 
Vite fait en direct, à tester. :D
 
P.S.: Par contre, j'aime pas du tout ta façon de multiplier la dernière lettre, autant mettre des noms de variable plus explicite : $sourceMaxi, $destinationMaxi, etc.

Reply

Marsh Posté le 22-01-2006 à 18:35:45    

Et je rajouterais: éviter les "magic numbers", il rendent le code difficile à comprendre et à modifier.
 
=> remplacer "600" par "$hauteur_max" (ou un truc du style) et définir "$hauteur_max = 600" un peu plus haut, de cette manière si la hauteur maximale doit un jour être modifiée il suffit de changer la valeur, et si tu reviens un jour dans le code dans 3 ou 6 mois tu ne te demanderas pas "gné ça correspond à quoi ce 600 là [:petrus dei]"


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-01-2006 à 18:47:21    

salut, je suis interesser par ton script. c'est toi qui l'a écrit? sinon source? explication?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed