Réduire la taille d'une image lors de l'upload php

Résolu
Uxon-Studio Messages postés 13 Date d'inscription mardi 12 septembre 2017 Statut Membre Dernière intervention 21 février 2018 - Modifié le 21 févr. 2018 à 22:38
Uxon-Studio Messages postés 13 Date d'inscription mardi 12 septembre 2017 Statut Membre Dernière intervention 21 février 2018 - 21 févr. 2018 à 23:40
Olà commu. Olà Jordane45 qui passera surement jeté un coup d’œil lol.

Je bosse sur un CMS pour un groupe automobile qui vend des voitures haut de gamme. Ils payent déja LaCentral et LeBonCoin pour 10 000 euros par ans et ils veulent changer ça, notamment en créant leurs propre site avec leurs annonces etc. Tout les photos des voitures sont prise avec un iPhone 8+ et font environs : 4000px sur 3000px pour un poids largement supp à 1Mb. Personne ne retouche les photos dans leurs boîtes et donc l'idéal serait que lors de l'upload l'image soit "compresser" en ko, donc plus petites.

J'ai vue la technique avec GD de php, mais le soucie c'est que je n'ai pas réussi à gérer l'image lorsqu'elle arrive en
$_FILE[image][name];


Il y à beaucoup de code sur le web sur comment faire mais toujours avec une photo existante genre
$imageBrute = 'image.jpg'; 


Quelqu'un pourrai m'aider à comprendre comment procéder je suis un peu perdu... Je vois la technique de copier les carract d'une image de base, Largeur + Longueur, de les diviser par 2 par exemple puis créer une image avec ces valeurs pour enfin copié l'ancienne image dans la nouvelle... mon bout de code nettoyé pour l'exemple:


if(isset($_FILES['photo']) AND !empty($_FILES['photo']['name'])) {
$tailleMax = 2097152;
$extensionsValides = array('jpg', 'JPG');
if($_FILES['photo']['size'] <= $tailleMax) {
$extensionUpload = strtolower(substr(strrchr($_FILES['photo']['name'], '.'), 1));
if(in_array($extensionUpload, $extensionsValides)) {

$ImageChoisie = imagecreatefromjpeg($_FILES['photo']['name']);
$TailleImageChoisie = getimagesize($_FILES['photo']['name']);

$NouvelleLargeur = 400;
$NouvelleHauteur = (($TailleImageChoisie[1] * (($NouvelleLargeur)/$TailleImageChoisie[0])));

$NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");

imagecopyresampled($NouvelleImage , $ImageChoisie , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]);
imagedestroy($ImageChoisie);
$NomImageChoisie = explode('.', $ImageNews);

$NomImageExploitable = time();

imagejpeg($NouvelleImage , 'php/'.$NomImageExploitable.'.'.$ExtensionPresumee, 100);
$LienImageNews = 'img/'.$NomImageExploitable.'.'.$ExtensionPresumee;

echo "FICHIER UPLOADER : OK";
exit;
}
else {
echo "EXTENTION INVALIDE";
exit;
}
}
else {
echo "TAILLE DE FICHIER TROP GRANDE";
exit;
}
}

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
21 févr. 2018 à 22:42
Hello

Lorsque tu upload une image sur un serveur... elle passe par un répertoire temp (le tmp du serveur en général)
Pour pouvoir l'utiliser, il faut d'abord la déplacer dans un dossier de ton site web.
Pour cela tu dois utiliser un move_uploaded_file
http://php.net/manual/fr/function.move-uploaded-file.php

A partir de là ... l'image sera dispo et donc tu pourras la traiter.

2
Uxon-Studio Messages postés 13 Date d'inscription mardi 12 septembre 2017 Statut Membre Dernière intervention 21 février 2018
21 févr. 2018 à 23:40
Je me disai bien que j'etait obliger. Mais je voulais faire sans... Merci amigos !
0
Rejoignez-nous