Insérer PNG et GIF dans ma galerie photo

[Résolu/Fermé]
Signaler
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
-
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
-
Bonjour à tous,

J'ai créé une galerie photos sur mon site qui génère des minis et des mediums en même temps, seulement la page d'ajout de photos ne digère pas les .PNG ou les .GIF contrairement aux .JPG qui passent niquel.
Lorsque je veux envoyer un fichier .PNG ou .GIF, voici le message que le serveur me renvoie :

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /mon_site/www/ajout_photos.php on line 13

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/tmp/phpc6NzXQ' is not a valid JPEG file in /mon_site/www/ajout_photos.php on line 13

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /mon_site/www/ajout_photos.php on line 23

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /mon_site/www/ajout_photos.php on line 30

Warning: imagedestroy(): supplied argument is not a valid Image resource in /mon_site/www/ajout_photos.php on line 32

Warning: move_uploaded_file(../photos/1262624241image/png) [function.move-uploaded-file]: failed to open stream: No such file or directory in /mon_site/www/ajout_photos.php on line 51

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpc6NzXQ' to '../photos/1262624241image/png' in /mon_site/www/ajout_photos.php on line 51
Impossible de copier le fichier dans ../photos/




Pour que vous puissiez mieux interpréter le problème, voici le code de ma page ajout_photos.php :


<?php
if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = '../photos/'; // dossier où sera déplacé le fichier

$tmp_file = $_FILES['fichier']['tmp_name'];

if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}
//RETAILLE IMAGE
$ImageChoisie = imagecreatefromjpeg($tmp_file);
$TailleImageChoisie = getimagesize($tmp_file);
$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 , $ImageChoisie , 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 , $ImageChoisie , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);

imagedestroy($ImageChoisie);

$NomImageExploitable = time();

imagejpeg($NouvelleImage_mini , '../photos/'.$NomImageExploitable.'-mini.jpg', 100);
imagejpeg($NouvelleImage_med , '../photos/'.$NomImageExploitable.'-med.jpg', 100);
$LienImageNews = '../photos/'.$NomImageExploitable.'.jpg';

// on vérifie maintenant l'extension
$type_file = $_FILES['fichier']['type'];

if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') )
{
exit("Le fichier n'est pas une image");
}

// on copie le fichier dans le dossier de destination
$name_file = $NomImageExploitable.'.jpg';

if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}

$sql= 'INSERT INTO images VALUES ("", "'.$_POST["titre"].'", "'.$NomImageExploitable.'", "'.$_POST["image"].'")';
$res = mysql_query($sql) or die(mysql_error());
if ($res)
{

$erreurTxt = $successTxT = "";

if ($erreurTxt == "") {
$successTxT = "<br /><span class='Style1'>Votre image a bien été ajoutée</span>";
}

if ($erreurTxt == "") {
//message envoyé
echo "<div class='success'>".$successTxT."</div>"; //vert
} else {
echo "<div class='error'><ul>".$erreurTxt."</ul></div>"; //rouge
}


//echo 'Le fichier a bien été envoyé';
}

//echo "Le fichier a bien été envoyé";
}



?>

<form method="post" enctype="multipart/form-data" action="ajout_photos.php">
<p>
Choisir un fichier<br />
<input type="file" name="fichier" size="30">

</p>

<p>
Choisir une galerie<br />
<select name="image" id="image">
<?php

$sql = 'SELECT id_gallerie,nom_gallerie FROM gallerie ORDER BY id_gallerie DESC';
$query = mysql_query($sql) or die ("Problème Requete SQL");

while ($ligne = mysql_fetch_assoc ($query)) {
$nodept = $ligne ["nodept"];
$nomdept = $ligne ["nom"];
echo '<option value = "'.$ligne["id_gallerie"].'">'.$ligne["nom_gallerie"].'</option>';
}

?>
</select>
</p>

<!--
<p>Titre de la photo<br />
<input name="titre" type="text" />
</p>
<br />
-->

<input type="submit" name="upload" value="Envoyer" id="btn_upload">

</form>




Merci d'avance aux personnes qui prendront quelques minutes pour lire et répondre à mon post ;)

13 réponses

Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
Vérifies le type MIME :
if($tmp_file['type'] == 'image/gif') $ImageChoisie = imagecreatefromgif($tmp_file);
if($tmp_file['type'] == 'image/png') $ImageChoisie = imagecreatefrompng($tmp_file);
...
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
Merci avion-f16, mais je comprends le fond mais pas la forme : je comprends la démarche mais ne comprends pas comment intégrer ceci à mon code.
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
À la place de la ligne suivante :
$ImageChoisie = imagecreatefromjpeg($tmp_file); 
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
Ok, mais dans ce cas il m'indique un warning lors de chaque ligne où est utilisée la variable $ImageChoisie :

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

imagecopyresampled($NouvelleImage_med , $ImageChoisie , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);

imagedestroy($ImageChoisie);
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
J'ai essayé de remplacer la variable $ImageChoisie par $tmp_file['type'] mais apparament ça ne semble pas être une bonne idée...
Messages postés
1628
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
5 septembre 2012
113
Normal que .gif et .jpeg (.jpg) ne passe pas.
Regarde ce que tu as écris :
$ImageChoisie = imagecreatefromjpeg($tmp_file);


Remplace bien par ce que F16 t'as donnée !
Bon courage ;)
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
Comme je te l'ai dit, au lieu de créer directement l'image dans $ImageChoisie, tu vérifies quel est le type de l'image afin de faire appelle à la bonne fonction.
if($tmp_file['type'] == 'image/jpeg' || $tmp_file['type'] == 'image/jpg') {
    $ImageChoisie = imagecreatefromjpeg($tmp_file);
} elseif($tmp_file['type'] == 'image/png') {
    $ImageChoisie = imagecreatefrompng($tmp_file);
} elseif($tmp_file['type'] == 'image/gif') {
    $ImageChoisie = imagecreatefromgif($tmp_file);
}
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
Oui avion-f16, ça a été fait suite à tes premières réponses. Ce que je ne comprends pas, c'est pourquoi j'ai ensuite un warning sur les lignes :

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

imagecopyresampled($NouvelleImage_med , $ImageChoisie  , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);
						
imagedestroy($ImageChoisie);
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
Quelle est l'erreur ?
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
la voici :
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322 >
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014

Très jolie :)
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1 >
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021

Elle était en dessous lol

L'erreur est que j'ai un warning pour les fonctions imagecopyresampled et imagedestroy qui utilisent toutes les deux la variables $ImageChoisie. Pourtant on a mis une condition pour type d'image.
Si j'upload un png, j'ai une image toute noire dans ma galerie.
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1 >
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021

Le code PHP doit être comme suit alors ?

<?php
if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = '../photos/'; // dossier où sera déplacé le fichier
				
$tmp_file = $_FILES['fichier']['tmp_name'];
				
if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}
//RETAILLE IMAGE
if($tmp_file['type'] == 'image/jpeg' || $tmp_file['type'] == 'image/jpg') {
$ImageChoisie = imagecreatefromjpeg($tmp_file);
} elseif($tmp_file['type'] == 'image/png') {
$ImageChoisie = imagecreatefrompng($tmp_file);
} elseif($tmp_file['type'] == 'image/gif') {
$ImageChoisie = imagecreatefromgif($tmp_file);
}
						
$TailleImageChoisie = getimagesize($tmp_file);
$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 , $ImageChoisie  , 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 , $ImageChoisie  , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);
						
imagedestroy($ImageChoisie);
						
$NomImageExploitable = time();
						
imagejpeg($NouvelleImage_mini , '../photos/'.$NomImageExploitable.'-mini.jpg', 100);
imagejpeg($NouvelleImage_med , '../photos/'.$NomImageExploitable.'-med.jpg', 100);
$LienImageNews = '../photos/'.$NomImageExploitable.'.jpg';
						
				
// on vérifie maintenant l'extension
$type_file = $_FILES['fichier']['type'];
				
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') )
{
exit("Le fichier n'est pas une image");
}

// on copie le fichier dans le dossier de destination
$name_file = $NomImageExploitable.'.jpg';
				
if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
				
$sql= 'INSERT INTO images VALUES ("", "'.$_POST["titre"].'", "'.$NomImageExploitable.'", "'.$_POST["image"].'")';
$res = mysql_query($sql) or die(mysql_error());
if ($res)
{
		 
$erreurTxt = $successTxT = "";
	
if ($erreurTxt == "")	{
$successTxT = "<br /><span class='Style1'>Votre image a bien été ajoutée</span>";
}
		
if ($erreurTxt == "")	{
//message envoyé
echo "<div class='success'>".$successTxT."</div>"; //vert
} else {
echo "<div class='error'><ul>".$erreurTxt."</ul></div>"; //rouge
}
	

//echo 'Le fichier a bien été envoyé';
}

//echo "Le fichier a bien été envoyé";
}



?>


Je t'ai mis en gras les lignes sur lesquelles j'ai droit à des warnings.

Merci ;)
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
L'erreur est que j'ai un warning pour les fonctions imagecopyresampled et imagedestroy qui utilisent toutes les deux la variables $ImageChoisie. Pourtant on a mis une condition pour type d'image.
Si j'upload un png, j'ai une image toute noire dans ma galerie.
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
Personne n'aurait de suggestion ?
Merci ;)
Pourquoi tu ne changes pas tout simplement le format de tes images? Avec Paint, rien de plus simple, il me semble que c'est ce que je ferais.
à moins que j'aie mal compris le problème car je dois avouer que je suis loin d'être une experte! Désolé si c'est le cas
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1 > smarties
Si ça ne tenait qu'à moi, je ferais en sorte de ne poster QUE des jpeg's, mais là c'est pour quelqu'un d'autre qui va poster les images et je ne suis pas sûr qu'il fasse la différence entre les différents formats d'images. ;)
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
avion-f16, j'ai remplacé
$ImageChoisie
par
if($tmp_file['type'] == 'image/jpeg' || $tmp_file['type'] == 'image/jpg') {
    $ImageChoisie = imagecreatefromjpeg($tmp_file);
} elseif($tmp_file['type'] == 'image/png') {
    $ImageChoisie = imagecreatefrompng($tmp_file);
} elseif($tmp_file['type'] == 'image/gif') {
    $ImageChoisie = imagecreatefromgif($tmp_file);
}

mais j'ai une erreur de type
Warning: imagecopyresampled(): supplied argument is not a valid Image resource
pour les lignes
imagecopyresampled
et
imagedestroy
.

J'ai oublié de remplacé quelque chose ? Merci
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
L'erreur n'est pas dans ce morceaux.
Et quand tu réponds à un message, inutile de me le signalé, je le vois en gras dans la liste à droite.
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
D'accord, saurais-tu me dire où est l'erreur. A quel niveau du code ?

Et ok, je vois la liste des topics en gras sur la droite, ça me l'a fait ;)
merci
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
Un petit coup de main quelqu'un ?
Pour que le sujet passe enfin au vert ;)
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
C'est là où il y a imagecopyresampled()
L'erreur signifie que le premier paramètre n'est pas une ressource image valide.
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
c'est à dire qu'il faut aussi remplacer imagecopyresampled() par
if($tmp_file['type'] == 'image/jpeg' || $tmp_file['type'] == 'image/jpg') {
$ImageChoisie = imagecreatefromjpeg($tmp_file);
} elseif($tmp_file['type'] == 'image/png') {
$ImageChoisie = imagecreatefrompng($tmp_file);
} elseif($tmp_file['type'] == 'image/gif') {
$ImageChoisie = imagecreatefromgif($tmp_file);
}

?

à priori non car c'est une fonction ...
que dois-je donc faire s'il te plaît ?
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
Je ne t'ai pas dit de remplacé imagecopyresampled() par quelque-chose !
Le paramètre que tu donnes entre parenthèse doit être une ressource image. Donc pas un nombre, une chaine, un booléen : une ressource image !
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
j'ai essayé avec $tmp_file, et ça m'affiche : Wrong parameter count for imagecopyresampled()
donc c'est pas ça la ressource image...?

on est pas loin là ? non ?
merci
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
il y a plusieurs paramètres dans la parenthèse, c'est $imagechoisie qu'il faut remplacer par une ressource image ?
Je n'ai pas trouvé ce que tu veux dire par "ressource image" en cherchant sur googl
Messages postés
18598
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2021
4 322
Une ressource image est une variable contenant une image (créée depuis imagecreate() par exemple).
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
dans le cas présent on parle donc de ma variable $ImageChoisie créée par imagecreate() :
$ImageChoisie = imagecreatefromjpeg($tmp_file);
non ?
Messages postés
90
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
30 mai 2014
1
toujours rien...
je désespère... de ne pas m'en sortir