Bonjour !
Nous vous en faites pas. J'ai déjà poser la question à Google. Evidemment je tombe sur la docu de PHP.net et je n'y comprend rien. Apparement c'est avec le paramètre quality.
Et les nombreux exemples sur internet (Forum ou autre) sont bien trop complexes et souvent il n'y même pas la notion d'upload, c'est juste pour la compression.
C'est simple, j'ai deja tout mon système en place. Lorsque l'utilisateur change l'image (de la BDD) la nouvelle image est uploader correctement, on vérifie avec les conditions etc.. Voici ce morceau de code :
// SI IL Y A UNE IMAGE
if(!empty($_FILES['img']['name'])){
// ON PREPARE LES PARAMETRES D'UPLOAD
$img = $_FILES['img'];
$ext = strtolower(substr($img['name'],-3));
$ext_accept = "jpg";
// SI CEST UN IMG JPG ET QUEL A LES BON RATIO
if($ext == $ext_accept){
$size = getimagesize($img['tmp_name']);
$largeur = $size[0];
$hauteur = $size[1];
$ratio = round($largeur/$hauteur, 1);
if($ratio == 1.5){
// SI Il Y A PAS DE ID C'EST QUE C'EST UN AJOUT D'IMAGE
if(empty($_POST['id'])){
// ALORS ON PARAMETRE LE NOM AVEC LE PROCHAIN AUTOINCREMENT
$resultat = $pdo->query("SELECT auto_increment FROM information_schema.tables WHERE table_schema = 'bosco' AND table_name='t_gallerie'");
$donnee = $resultat->fetch();
$id = $donnee['auto_increment'];
$img_nom = 'gallerie'.$id.'.'.$ext;
move_uploaded_file($img['tmp_name'],"../img/gallerie/".$img_nom);
// ET DONC ON AJOUTE LE TITRE ET L'IMAGE A LA BDD
try{
$pdo->prepare('INSERT t_gallerie SET nom = ?, img = ?')->execute([$titre, $img_nom]);
}catch(Exception $e){
echo 'Erreur : ';
echo $e->getMessage();
die();
}
$_SESSION['flash']['info'] = "La nouvelle image a bien été ajouté";
}
// SINON C'EST QUE C'EST UNE MODIF D'UNE IMAGE EXISTENTE
else{
Ce code fonctionne. Je souhaite juste ajouter la fonction de compression et avant l'upload si possible. Je m'explique, les images qui seront généralement uploader par l'utilisateur auront certainement une taille de 3MO en moyenne et j'aimerais qu'elle descende à 1MO maximum.
Alors je sais pas si c'est bien avec le paramètre quality et j'ai crue comprendre qu'il faut d'abord uploader l'image et après on peu la compresser, non ? Enfin je sais pas. Pas tout compris. Si possible je souhaite faire la compression en même temps que l'upload.
Je vous remercie deja pour votre aide ! J'en ai vraiment besoin :)
Et croyez moi j'ai déjà fait plusieurs recherches et plusieurs tests, donc inutile de me renvoyer sur la doc de PHP, ce sera le même problème !
C'est bon j'ai reussi ! :)
Voici le code :
//on parametre le nom de l'image
$img_nom = 'slider'.$id.'.'.$ext;
//on l'upload tel quelle sur le serveur
move_uploaded_file($img['tmp_name'],"../img/slider/".$img_nom);
//on la recupère avec la fonction imagecreatefromjpeg et avec son chemin
$img = imagecreatefromjpeg("../img/slider/".$img_nom);
//Enfin on la remet ou elle était avec la qualité qu'on veut ! (ici 50)
imagejpeg($img, "../img/slider/".$img_nom, 50);
Ca marche parfaitement, et ca se fait très rapidement, l'upload et la compression c'est quasi en même temps.
Merci Huggy de m'avoir aiguiller sur le bon chemin ! ;-)
non tu ne peux pas faire de compression avant/pendant l'upload. par contre, tu peux encourager tes utilisateurs a se servir de tinypng.com par exemple...
ou alors compresser l'image avec php une fois l'upload terminé.
ou encore faire de l'ajax avant l'envoi de l'upload qui va se servir de l'API de tinypng (https://tinypng.com/developers/reference) et une fois l'image compréssé recue, tu l'upload sur ton serveur.
Hello keulu
Merci pour ta réponse.
Oui c'est bien ce que je pensais, avant l'upload ce n'est pas vraiment possible. Et je connais tinypng.com, c'est justement ce qui ma donné envie de faire ce système de compression et ainsi empêcher à mes utilisateurs de devoir changer de site entre temps.
J'ai également vue l'API de tinypng mais c'est du chinois pour moi haha, je suis qu'en PHP brut actuellement... Alors tout ces systemes me paraissent un peu compliqué pour le moment.
La dernière solution consisterait donc à uploader l'image tel quel et à la compresser ensuite ? Ca peu me convenir. Ensuite je supprime l'image original du serveur.
T'aurais une piste pour ca ?
Sinon ben, rediriger mes utilisateurs sur tinypng.com sera la solution de secours !
Merci encore à toi !
Oui j'ai vue mais je ne veux pas redimensionnez mais images, mais les compresser pour reduire leur poids.
De plus, je connais pas composer.
En fait je cherchais juste un moyen tout bête pour compresser une image en PHP, comme le fait tinypng sans pour autant devoir installer une API ou autre..
Une fois que l'image est uploader je dois bien pouvoir la dupliquer et la compresser ? (Avec le parametre quality) La question c'est de savoir comment.
Dans ce cas tu devrais t'en sortir avec la bibliothèque GD
tu lis ton image à partir du fichier : imagecreatefromjpeg
et tu la sauves en changeant le facteur de qualité
imagejpeg ( $monimage, $filename, $quality)
Justement je n'ai pas exactement compris comment utiliser cette fonction. imagejpeg envoi directement l'image sur le serveur ?
La j'en suis à
$img_nom = 'slider'.$id.'.'.$ext;
move_uploaded_file($img['tmp_name'],"../img/slider/".$img_nom);
Du coup après je fait, imagecreatefromjpeg mais avec quoi ?
Et
imagejpeg ($img_nom, $file_name, 40)
?
C'est sensé retourné quoi ?