Upload d'image et copie pour redimensionnement
Résolu
Bonjour,
je fais un test sur l'upload d'images. Ca marche nickel sauf quand je veux réutiliser la même image uploadée pour la redimensionner plusieurs fois:
Aucun message d'erreur mais seule l'image A est enregistrée. Avez vous une idée de quoi faire pour faire 3 images et pas une seule.
Merci bien :)
je fais un test sur l'upload d'images. Ca marche nickel sauf quand je veux réutiliser la même image uploadée pour la redimensionner plusieurs fois:
if(isset($_FILES['image']) && $_FILES['image']['error']==0)
{
if ($_FILES['image']['size']<=10000000)
{
$infosfichier = pathinfo($_FILES['image']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
{
if($infosfichier['extension']=="jpg" || $infosfichier['extension']=="jpeg")
{
$source = imagecreatefromjpeg($_FILES['image']['tmp_name']);
}
elseif($infosfichier['extension']=="png")
{
$source = imagecreatefrompng($_FILES['image']['tmp_name']);
}
elseif($infosfichier['extension']=="gif")
{
$source = imagecreatefromgif($_FILES['image']['tmp_name']);
}
else
{
echo "Erreur lors de la convertion de votre image.";
return false;
}
$taille_A = imagecreatetruecolor(300, 420);
$taille_B = imagecreatetruecolor(200, 280);
$taille_C = imagecreatetruecolor(150, 210);
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_taille = imagesx($taille_A);
$hauteur_taille = imagesy($taille_A);
imagecopyresampled($taille_A, $source, 0, 0, 0, 0, $largeur_taille, $hauteur_taille, $largeur_source, $hauteur_source);
imagejpeg($taille_A, $_FILES['image']['tmp_name'], 80);
move_uploaded_file($_FILES['image']['tmp_name'], '../../img/cards/1-A.jpg');
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_taille = imagesx($taille_B);
$hauteur_taille = imagesy($taille_B);
imagecopyresampled($taille_B, $source, 0, 0, 0, 0, $largeur_taille, $hauteur_taille, $largeur_source, $hauteur_source);
imagejpeg($taille_B, $_FILES['image']['tmp_name'], 80);
move_uploaded_file($_FILES['image']['tmp_name'], '../../img/cards/1-B.jpg');
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_taille = imagesx($taille_C);
$hauteur_taille = imagesy($taille_C);
imagecopyresampled($taille_C, $source, 0, 0, 0, 0, $largeur_taille, $hauteur_taille, $largeur_source, $hauteur_source);
imagejpeg($taille_C, $_FILES['image']['tmp_name'], 80);
move_uploaded_file($_FILES['image']['tmp_name'], '../../img/cards/1-C.jpg');
echo "Votre image à bien été uploadée.";
}
}
else
{
echo "Votre image est trop lourde. Veuillez en uploader une de moins de 200ko.<br /><a href=\"index.php?id=".$_POST['id']."\">Retour</a>";
}
}
else
{
echo "Erreur, veuillez réuploader l'image.<br /><a href=\"index.php?id=".$_POST['id']."\">Retour</a>";
}
Aucun message d'erreur mais seule l'image A est enregistrée. Avez vous une idée de quoi faire pour faire 3 images et pas une seule.
Merci bien :)
1 réponse
-
Salut,
Le problème vient peut-être du fait que tu déplace l'image source via l'instruction move_uploaded_file juste après le premier redimensionnement, du coup les redimensionnements suivants ne fonctionne pas à cause de l'absence de l'image source.
Essaye d'utiliser un autre fichier temporaire pour la création de l'image redimensionnée (imagejpeg), par exemple :// on crée l'image redimensionnée dans le fichier ../../img/cards/1-A.jpg imagejpeg($taille_A, '../../img/cards/1-A.jpg', 80); // donc pas besoin de déplacer l'image uploadé, on commente l'instruction move_uploaded_file //move_uploaded_file($_FILES['image']['tmp_name'], '../../img/cards/1-A.jpg');
Bonne journée,