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

Nouveau WRInaute
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
 
WRInaute passionné
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:
<?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;
}
?>
 
Nouveau WRInaute
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:
$schedule_id  = $_GET["schedule_id"] ;

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

Code:
<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:
<? 
$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:
<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
 
Discussions similaires
Haut