bonjour a la suite de mon script d'upload j'ai toujours un problème Smiley ohwell

voici le code


$TailleImageChoisie = getimagesize($fichier);


$NouvelleLargeur_mini = 100; //Largeur choisie à 100px mais modifiable
$NouvelleLargeur_med = 600; //Largeur choisie à 600px mais modifiable
                                                
[b]$Reduction = ( ($NouvelleLargeur_mini * 100)/$TailleImageChoisie[0] );[/b]
$NouvelleHauteur_mini = ( ($TailleImageChoisie[1] * $Reduction)/100 );
                                                
$NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur");
                                                
imagecopyresampled($NouvelleImage_mini , $fichier  , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                                
$Reduction = ( ($NouvelleLargeur_med * 100)/$TailleImageChoisie[0] );
$NouvelleHauteur_med = ( ($TailleImageChoisie[1] * $Reduction)/100 );
                                                
$NouvelleImage_med = imagecreatetruecolor($NouvelleLargeur_med  , $NouvelleHauteur_med ) or die ("Erreur");
                                                
imagecopyresampled($NouvelleImage_med , $fichier  , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                                
                                                
$NomImageExploitable = time();
                                                
imagejpeg($NouvelleImage_mini , '/upload/redim/'.$NomImageExploitable.'-mini'$extension, 100);
imagejpeg($NouvelleImage_med , 'upload/redim/'.$NomImageExploitable.'-med'$extension, 100);
$LienImageNews = '/upload/redim/'.$NomImageExploitable.''.$extension.'';


le problème est le suivant j'obtien 2 erreures

Warning: Division by zero in /home/iphone4gpro/www/upload.php on line 24

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/iphone4gpro/www/upload.php on line 27

la ligne 24 est en gras

pourquoi j'ai une division par zero alors que je récupère les dimension de mon fichier correctement ???
Loic7605 a écrit :
pourquoi j'ai une division par zero alors que je récupère les dimension de mon fichier correctement ???
Ah ? Tu es sûr que tu les récupères bien ? Tu as essayé d'afficher ce que ça valait ?
Es-tu sûr que $fichier contient bien un chemin correct vers le fichier uploadé (chemin+nom+extension) ?
voila j'ai réussi a résoudre le problème simplement mes images se crée bien en miniature mais il apparaissent toute noire, je pense que cela provient de mes imagecopyresampled()


 $Reduction = ( ($NouvelleLargeur_mini * 100)/$TailleImageChoisie[0] );
        $NouvelleHauteur_mini = ( ($TailleImageChoisie[1] * $Reduction)/100 );
                                                
        $NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur");
                                                
        imagecopyresampled($NouvelleImage_mini , $NouvelleImage_mini , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                                
        $Reduction = ( ($NouvelleLargeur_med * 100)/$TailleImageChoisie[0] );


comment regler le probleme ??
Modifié par Loic7605 (05 May 2010 - 19:52)
Pour imagecopyresampled() c'est parce que tu lui donnes un fichier en argument, alors qu'elle attend une ressource image. Pour créer une ressource à partir d'un fichier, il faut utiliser imagecreatefrompng(), imagecreatefromjpeg, etc.
Modifié par phpdoesnotcare (05 May 2010 - 19:53)
J'ai mit cela comme ca

$image = @imagecreatefromjpeg($mini);

        imagecopyresampled($NouvelleImage_mini , $image , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                                


je ne sait pas si je l'utilise bien car j'ai beau chercher son fonctionnement sur internet je ne comprend pas trop :s

j'obtiens une erreur

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/iphone4gpro/www/upload.php on line 30
Sur php.net voilà un script qu'ils donnent en exemple :
// The file
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, null, 100);
Tu as l'air de faire quelque chose de semblable, alors essaie de t'en inspirer. Smiley smile
Modifié par phpdoesnotcare (05 May 2010 - 22:07)
Je comprend le système mais le problème que je rencontre contrairement a cet exemple et le suivant.
sur l'exemple on voit $filename = (test.jpg)
moi je ne peut pas donner de fichier proprement dit car il faut que je récupére le fichier qui et nommé aléatoirement via la variable uniqid()

est t'il possible de faire
$filename = ($_POST['fichier']);
ou un truc dans se genre pour récupérer le nom du fichier en sortie de la variable uniqid???
J'ai trouver une solution qui serait celle si

$image_mini=imagecreatefromjpeg($_FILES['avatar']['tmp_name']);

mais le problème et que l'image est bien redimmentionner mais j'ai tout autour une bordure noire de la taille de l'image initiale ^^
Non je pensais à une erreur dans l'un des paramètres, mais après réflexion ça n'a rien à voir. Le problème c'est que tu as une image initiale qui fait par exemple 200x200, et tu veux qu'elle ne fasse plus que 50x50. Au début du script tu as créé une nouvelle ressource image sur laquelle sera collée l'image finale. Le problème semble être que cette ressource image a la même taille que l'image d'origine (200x200), au lieu d'avoir celle de l'image finale que tu veux (50x50). Par défaut elle a un fond noir, et comme tu colles une image de 50x50 sur une image de 200x200, ça laisse apparaître le fond noir. Regarde bien ton code et essaie d'afficher tes variables de tailles pour vérifier qu'elles ont bien pour valeur ce qu'elles sont censées avoir.
scirptphp:
<?php
$dossier = 'upload/';
$TailleImageChoisie = getimagesize($avatar);
$fichier = basename($_FILES['avatar']['name']);
$taille_maxi = 4000000;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.bmp');
$extension = strrchr($_FILES['avatar']['name'], '.'); 

if(!in_array($extension, $extensions))
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg,';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur))
{

       $NouvelleLargeur_mini = 100; //Largeur choisie à 100px mais modifiable
        $NouvelleLargeur_med = 600; //Largeur choisie à 600px mais modifiable
                                                
        $Reduction = ( ($NouvelleLargeur_mini * 100)/$TailleImageChoisie[0] );
        $NouvelleHauteur_mini = ( ($TailleImageChoisie[1] * $Reduction)/100 );
                                                
        $NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur");

        imagecopyresampled($NouvelleImage_mini , $image_mini , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                                
        $Reduction = ( ($NouvelleLargeur_med * 100)/$TailleImageChoisie[0] );
        $NouvelleHauteur_med = ( ($TailleImageChoisie[1] * $Reduction)/100 );
                                                
        $NouvelleImage_med = imagecreatetruecolor($NouvelleLargeur_med  , $NouvelleHauteur_med ) or die ("Erreur");
                                                
        imagecopyresampled($NouvelleImage_med , $image_med  , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                       
        $NomImageExploitable = time();
                                                
        imagejpeg($NouvelleImage_mini , 'upload/redim/'.$NomImageExploitable.'-mini.jpg', 100);
        imagejpeg($NouvelleImage_med , 'upload/redim/'.$NomImageExploitable.'-med.jpg', 100);
        $LienImageNews = '/upload/redim/'.$NomImageExploitable.'.jpg';

     $fichier = md5(uniqid()) . $extension;
	 
     if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier))
     {
          echo 'Upload effectué avec succès !';
		  echo 'http://www.monsite.net/upload/'.$fichier.'';
		  	 
 
			 
			 
     }
     else
     {
          echo 'Echec de l \'upload !';
     }
}
else
{
     echo $erreur;
}
?>



formulaire html:
<form method="POST" action="upload.php" enctype="multipart/form-data">
     <input type="hidden" name="MAX_FILE_SIZE" value="4000000">
     Fichier : <input type="file" name="avatar">
     <input type="submit" name="envoyer" value="Envoyer le fichier">
</form>


je ne voit a aucun moment l'erreur pouratant j'obtient une image comme celle ci
http://www.iphone4gpro.monespace.net/upload/redim/1273090919-med.jpg
Je ne connais pas la taille de ton image originale, mais celle que tu viens de poster fait 600px de largeur, càd comme $NouvelleLargeur_med. Essaie de ne traiter que l'image miniature, et met le traitement de l'image moyenne en commentaire, le temps de voir si ça change quelque chose.
J'ai enfin trouver !!!
Maintenant juste une chtiote question est il possible d'adapter la variable $imagecreatefrom
pour toute les extension au lieu de faire
if ($extension==jpeg){
$imagecreatefromjpeg
}
elseif($extension=png){
$imagecreatefrompng
}
elseif etc....
Bien sûr ! Smiley cligne

// Tu commences par récupérer l'extension de ton image
$extension = // du code pour récupérer l'extension de l'image
// Tu concatènes 'imagecreatefrom' avec l'extension que tu viens de récupérer
$imagecreatefromextension = 'imagecreatefrom'.$extension;
// ... Et Tadaaa ! Ca te fait une fonction [cligne]
$imagecreatefromextension(...);

Modifié par phpdoesnotcare (06 May 2010 - 01:25)
si je ne me trompe pas j'ai donc



$extension = strrchr($_FILES['avatar']['name'], ''); 
$imagecreatefromextension = 'imagecreatefrom'.$extension;
$imagecreatefromextension ($_FILES['avatar']['tmp_name']);

imagecopyresampled($NouvelleImage_mini , $imagecreatefromextension , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);

Modifié par Loic7605 (06 May 2010 - 01:54)