Insérer PNG et GIF dans ma galerie photo

Résolu/Fermé
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 - 5 janv. 2010 à 17:16
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 - 21 avril 2010 à 19:01
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 ;)
A voir également:

13 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 janv. 2010 à 17:39
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);
...
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
5 janv. 2010 à 17:49
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.
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 janv. 2010 à 17:54
À la place de la ligne suivante :
$ImageChoisie = imagecreatefromjpeg($tmp_file); 
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
5 janv. 2010 à 18:05
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);
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
5 janv. 2010 à 19:02
J'ai essayé de remplacer la variable $ImageChoisie par $tmp_file['type'] mais apparament ça ne semble pas être une bonne idée...
0
LelLex Messages postés 1628 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 5 septembre 2012 112
5 janv. 2010 à 19:37
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 ;)
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 janv. 2010 à 20:29
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);
}
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
5 janv. 2010 à 21:56
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);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 janv. 2010 à 23:52
Quelle est l'erreur ?
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
6 janv. 2010 à 15:45
la voici :
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497 > jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014
12 janv. 2010 à 17:17
Très jolie :)
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1 > avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024
12 janv. 2010 à 18:50
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.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1 > avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024
12 janv. 2010 à 19:06
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 ;)
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
6 janv. 2010 à 11:32
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.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
12 janv. 2010 à 15:50
Personne n'aurait de suggestion ?
Merci ;)
0
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
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1 > smarties
12 janv. 2010 à 19:15
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. ;)
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
26 mars 2010 à 21:03
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
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
29 mars 2010 à 20:28
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.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
29 mars 2010 à 20:35
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
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
31 mars 2010 à 19:24
Un petit coup de main quelqu'un ?
Pour que le sujet passe enfin au vert ;)
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
31 mars 2010 à 21:12
C'est là où il y a imagecopyresampled()
L'erreur signifie que le premier paramètre n'est pas une ressource image valide.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
31 mars 2010 à 21:16
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 ?
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
31 mars 2010 à 21:26
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 !
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
31 mars 2010 à 21:44
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
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
14 avril 2010 à 12:52
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
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
17 avril 2010 à 16:14
Une ressource image est une variable contenant une image (créée depuis imagecreate() par exemple).
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
17 avril 2010 à 16:37
dans le cas présent on parle donc de ma variable $ImageChoisie créée par imagecreate() :
$ImageChoisie = imagecreatefromjpeg($tmp_file);
non ?
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
21 avril 2010 à 19:01
toujours rien...
je désespère... de ne pas m'en sortir
0