création de photo miniature suite à l'upload d'une image

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

waterjetmedia
Nouveau WRInaute
 
Messages: 9
Inscription: Jeu Sep 20, 2007 11:17

création de photo miniature suite à l'upload d'une image

Message le Mer Sep 26, 2007 14:30

Bonjour,

Je m'occupe du site d'un club de foot et j'aimerais pouvoir faire une galerie match par match.

Jusque là, tout va bien :) J'arrive à uploader les images sur le serveur, mais j'aimerais qu'au moment de l'upload, créer une image miniature au format 130 x 98 de cette même image et l'appeler mini_lenomdemonimage.jpg

ensuite j'aurais plus qu'à lister mes images par match pour faire la galerie.

Je n'arrive pas à créer l'image miniature.

J'ai essayé cela, mais cela ne fonctionne pas :

<?php
$fichierSource = $_FILES['photo']['name'];

$largeurDestination = 130;
$hauteurDestination = 98;
$im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination)
or die ("Erreur lors de la création de l'image");

$source = ImageCreateFromJpeg($fichierSource);

$largeurSource = imagesx($source);
$hauteurSource = imagesy($source);

$miniature = "mini_$fichierSource";
ImageJpeg ($im, $miniature);
echo "Image miniature générée: $miniature";
?>

peut-être que simplement le path est faux. Les images sont uploadés sur un répertoire images/galerie/ et ma page d'administration pour uploader mes images se trouve sur un répertoire admin/galerie/

Là... je pêche et j'ai besoin de votre aide :P lol


medium69
WRInaute accro
WRInaute accro
 
Messages: 2188
Inscription: Sam Mai 07, 2005 9:36

Message le Mer Sep 26, 2007 16:51

Je te donne une fonction que j'ai codé ; elle est brute de décoffrage, mais se cela peut t'aider, je ne suis pas contre un petit don de 5 000 dollars... je veux dire 5 000 euros.

Le code garde le rapport des dimensions de l'image.

Code: Tout sélectionner
<?php
/* *************************************************************************************
- vignette($img_file, $img_max_width = 450, $img_max_height = 350)
- Création d'une vignette à partir d'une image ($img_file)
- Les extensions prises en compte sont jpg et png (le gif simple est remplacé par le png)
- Le gif n'est jamais redimensionné (gif animé)
- Dernière version : 23/09/2007

* $img_file : chemin vers le fichier image à redimensionner
* $img_max_width : largeur maximum que doit faire la miniature
* $img_max_height : Hauteur maximum que doit faire l'image
************************************************************************************* */
function vignette($img_file, $img_max_width, $img_max_height) {
   
   $file = realpath($img_file); // Chemin canonique absolu de l'image
   $dir = dirname($img_file).'/'; // Chemin du dossier contenant l'image
   $img_infos = getimagesize($file); // Récupération des infos de l'image
   $img_width = $img_infos[0]; // Largeur de l'image
   $img_height = $img_infos[1]; // Hauteur de l'image
   $img_type = $img_infos[2]; // Type de l'image
   
   // Détermination des dimensions de l'image
   if ($img_max_width > $img_width) {
      $img_max_width = $img_width; // Largeur de la vignette
   }
   
   if ($img_max_height > $img_height) {
      $img_max_height = $img_height; // Hauteur de la vignette
   }
   
   $img_thumb_fact_width_height = $img_max_width / $img_max_height; // Facteur largeur par hauteur des dimensions max de la vignette
   $img_fact_width_height = $img_width / $img_height; // Facteur largeur par hauteur de l'original
   
   // Détermination des dimensions de la vignette
   if ($img_thumb_fact_width_height < $img_fact_width_height) {
      $img_thumb_width  = $img_max_width; // Largeur de la vignette
      $img_thumb_height = $img_thumb_width / $img_fact_width_height; // Hauteur de la vignette
   } else {
      $img_thumb_height = $img_max_height;  // Hauteur de la vignette
      $img_thumb_width  = $img_thumb_height * $img_fact_width_height; // Largeur de la vignette
   }
   
   // Vérification de la présence de la vignette
   $img_file_temp = DOSS_TEMP.$img_file; // Adresse de l'image temporaire de base
   $exp_img_thumb_width = explode(',', $img_thumb_width); // Découpe de la taille de la vignette
   $img_thumb_name = preg_replace('/(.+)\.(.+)/U', '$1'.REW.$exp_img_thumb_width[0].'px.$2', $img_file_temp); //Adresse de la vignette
   if (is_file($img_thumb_name) ) {
      return $img_thumb_name;
   }      
   
   // Création du dossier de l'image
   $exp_dir = explode('/', DOSS_TEMP.$dir); // Découpe du chemin
   $dir = '';
   
   for   ($a = 0; $a < count($exp_dir) -1; $a++) {
      $dir .= $exp_dir[$a].'/'; // Chemin du cache
      
      // Détermination du chemin
      if (!is_dir($dir)) {
         mkdir($dir); // Création du dossier
      }
   }
   
   // Sélection des variables selon l'extension de l'image
   switch ($img_type) {
      case 2:
         $img = imagecreatefromjpeg($file); // Création d'une nouvelle image jpeg à partir du fichier
         $img_ext = '.jpg'; // Extension de l'image
         break;
      case 3:
         $img = imagecreatefrompng($file); // Création d'une nouvelle image png à partir du fichier
         $img_ext = '.png';  // Extension de l'image
   }
   
   $img_thumb = imagecreatetruecolor($img_thumb_width, $img_thumb_height); // Création de la vignette
   imagecopyresized($img_thumb, $img, 0, 0, 0, 0, $img_thumb_width, $img_thumb_height, $img_width, $img_height); // Insertion de l'image de base redimensionnée
   $file_name = basename($img_file, $img_ext); // Nom du fichier sans son extension
   //$img_thumb_name = $dir.$file_name.$img_thumb_width'.px.'.$img_ext; // Chemin complet du fichier de la vignette
   $img_thumb_name = $dir.$file_name.REW.$exp_img_thumb_width[0].'px'.$img_ext; // Chemin complet du fichier de la vignette
   
   // Sélection de la vignette créée
   switch($img_type){
      case 2:
         imagejpeg($img_thumb, $img_thumb_name); // Enregistrement d'une image jpeg avec une compression de 75 par défaut
         break;
      case 3:
         imagepng($img_thumb, $img_thumb_name); // Enregistrement d'une image png
   }
   
   return $img_thumb_name;
}
?>

waterjetmedia
Nouveau WRInaute
 
Messages: 9
Inscription: Jeu Sep 20, 2007 11:17

Message le Jeu Sep 27, 2007 8:59

je veux bien te transférer les 5000 euros sur ton compte en Suisse si tu le désires, mais avant, j'aimerais comprendre :)

Je ne comprends pas comment utiliser ta fonction.

J'explique un peu plus précisement ou j'en suis à l'heure actuelle :

J'explique ou j'en suis :

J'ai la liste de mes matches qui s'affichent à l'écran sur ma page 1. Je sélectionne le match et je récupère l'id du match "schedule_id" que je récupère de cette manière dans ma page upload1.php :

Code: Tout sélectionner
$schedule_id  = $_GET["schedule_id"] ;


J'ai ensuite dans le script de ma page un tableau pour joindre le fichier photo :

Code: Tout sélectionner
<table width="100%"  border="0" cellspacing="1" cellpadding="1" >
<form action="upload2.php" method="post" enctype="multipart/form-data">
<input type='hidden' name='schedule_id' value='<?php echo $schedule_id; ?>'>
  <tr>
    <td>Uploader un fichier : </td>
    <td><input type="file" name="photo" size="40" maxlength="80"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input TYPE="image" src="http://www.monsite.com/images/validez.gif"></td>
  </tr>
</form>
</table>


Ensuite sur ma page upload2.php j'ai le code suivant tout en haut de ma page:

Code: Tout sélectionner
<?
$schedule_id        = $_POST["schedule_id"] ;

$album="SELECT * FROM schedule WHERE schedule_id = '$schedule_id'";

if(!$album_rs_query = mysql_query($album, $obj_conn)) {
echo mysql_error($obj_conn);
exit();
}
?>


puis dans le body :

Code: Tout sélectionner
<table width="100%"  border="0" cellspacing="1" cellpadding="1" bgcolor="#FFFFFF">
<form action="upload2.php" method="post" enctype="multipart/form-data">
<?
//On vérifie ici que le fichier ne soit pas vide et qu'il a bien été uploadé
if(!empty($_FILES['photo']['tmp_name']) AND is_uploaded_file($_FILES['photo']['tmp_name']))
{

  //On ne vérifie pas la taille du fichier en passant par $_FILES['photo']['size']
  //afin d'éviter les failles de sécurité.
  //Ici on limite la taille du fichier à 32Kb (32768 bits); si le fichier dépasse
  //cette taille il est rejeté.
  if(filesize($_FILES['photo']['tmp_name'])<500000)
  {

    //On vérifie maintenant le type du fichier grâce à la fonction getimagesize()
    list($largeur, $hauteur, $type, $attr)=getimagesize($_FILES['photo']['tmp_name']);

      //Si le Type est JPEG (chiffre 2) on copie l'image
      //if($type===2)
      //{

        //Copie du fichier dans le répertoire de destination
      //$chemin = $_SERVER["DOCUMENT_ROOT"];
      //echo $chemin;
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/images/galerie/'.$_FILES['photo']['name'].''))
        {

      // change permissions for the file
      chmod( $_SERVER['DOCUMENT_ROOT']."/images/galerie/" . basename( $_FILES['photo']['name']),0644);

        //Le fichier a été uploadé correctement
        echo 'Fichier uploadé correctement';
      ?>
      
      <?
        }
        else
        {
        //Erreur
        echo 'Erreur, opération non effectuée!';
        }
      //}
    }
  }
?>
<?php
    $fichierSource =  $_FILES['photo']['name'];
   
    $largeurDestination = 130;
    $hauteurDestination = 98;
    $im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination)
            or die ("Erreur lors de la création de l'image");

    $source = ImageCreateFromJpeg($_SERVER['DOCUMENT_ROOT'].'/images/galerie/'.$fichierSource);
   
    $largeurSource = imagesx($source);
    $hauteurSource = imagesy($source);

    ImageCopyResampled($im, $source, 8, 8, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8), $largeurSource, $hauteurSource);
   
    ImageString($im, 0, 12, $hauteurDestination-18, "$fichierSource - ($largeurSource x $hauteurSource)", $blanc);

   $miniature = "mini_$fichierSource";
    ImageJpeg ($im, $miniature);
    echo "Image miniature générée: $miniature";
?>
  <tr>
    <td>Photo soumise : </td>
    <td><? echo $_FILES['photo']['name']?><input type='hidden' name='picture_link' value='<?php echo $_FILES['photo']['name'];?>'></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><img src="../../images/galerie/<?php echo $_FILES['photo']['name']?>"></td>
  </tr>
  <tr>
    <td>Match :</td>
    <td>
    <?php WHILE ($album_rs = mysql_fetch_assoc($album_rs_query)){ ?>
   <?php echo $album_rs['schedule_id'];?><input type='hidden' name='schedule_id' value='<?php echo $album_rs['schedule_id'];?>'>
    <? } ?>
    </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td bgcolor="#BDC4CB" align="left" valign="top"><input TYPE="image" src="http://www.monsite.com/images/validez.gif"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>

<?php
$hote='localhost';
$user='monuser';
$password='monpassword';

mysql_connect($hote, $user, $password);
mysql_select_db('matable')
      or die ('Failed to open database');

if ($picture_link<>'')
{   
    echo 'Merci, votre photo a été correctement soumise. Cliquez <a href="modification1.php" class="link gras">ici</a> pour soumettre une autre photo';
   
   mysql_query("INSERT  INTO galerie (picture_link, schedule_id)
            VALUES ('$picture_link','$schedule_id') ")
   
         
         or die("An error has occured, please try again or contact the administrator");
   
}
else
{
   echo 'Cliquez sur "VALIDEZ" pour confirmer la soumission de la photo, sans cela l\'entrée ne sera pas validée.';
}
?>
    </td>
  </tr>
</form>
</table>


Le résultat est que j'arrive bien à uploader la photo dans sa taille originale dans le répertoire www.monsite.com/images/galerie/

J'arrive également à updater ma base de donnée 'galerie' avec les données sur l'identifiant du match et le nom de la photo, mais je n'arrive pas à créer la minitature mini_maphoto1.jpg et le message qu'il m'affiche à l'écran :

Image miniature générée: mini_

alors qu'il devrait me créer par exemple mini_maphoto1.jpg si la photo initiale s'appelait maphoto1.jpg


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités