Génération miniature d'images à l'upload

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Génération miniature d'images à l'upload

Re: Génération miniature d'images à l'upload

par @rthur » 11 avr. 2018, 18:56

Normalement tu devrais pouvoir avoir une miniature quasi-parfaite et donc pas de flou (si tu ne zoomes pas dans l'image généré bien sûr)

Il y a un 3ème paramètre à la fonction imagejpeg() qui permet de définir la qualité attendue (entre 0 et 100, par défaut à 75), tu peux faire quelques essais pour voir ce que ça donnerai en le mettant à 80/85 ou 90.
https://php.net/imagejpeg

Attention à vérifier le poids de l'image quand tu joue sur la qualité car en le mettant à 100 tu risque d'avoir des surprises ;)

Re: Génération miniature d'images à l'upload

par fabrice88250 » 11 avr. 2018, 10:40

Ok merci... du coup j'utilise imagecopyresampled à la place qui donne une miniature bien plus belle (mais qui reste un peu flou).

Re: Génération miniature d'images à l'upload

par @rthur » 11 avr. 2018, 10:24

Bonjour,

Tu utilises la fonction imagecopyresized() pour faire ton redimensionnement, il y a un indice dans la doc pour répondre à ta problématique :
http://php.net/imagecopyresized

Génération miniature d'images à l'upload

par fabrice88250 » 11 avr. 2018, 08:05

Bonjour,
j'ai un code qui me permet de généré lorsque je fais un upload d'image une miniature de 400px de large (ou plus ou moins en fonction).
le code fonctionne bien la miniature est bien créée et enregistrée sur mon serveur mais par contre la qualité de cette miniature est vraiment très très mauvaise ! et donc pas présentable.

Voilà mon code, serait-il possible d’améliorer la qualité de l'image miniature ou de ne pas avoir de perte de qualité ?

Code : Tout sélectionner

if(!empty($_FILES)) { $avatar = $_FILES['avatar']; $avatar_name = $avatar['name']; $ext = strtolower(substr(strrchr($avatar_name,'.'),1)); $ext_aut = array('jpg','jpeg','png','gif'); function check_extension($ext,$ext_aut) { if(in_array($ext,$ext_aut)) { return true; } } $valid = (!check_extension($ext,$ext_aut)) ? false : true; $erreur = (!check_extension($ext,$ext_aut)) ? 'Veuillez charger une image' : ''; if($valid) { $max_size = 5000000; if($avatar['size']>$max_size) { $valid = false; $erreur = 'Fichier trop gros'; } } if($valid) { if($avatar['error']>0) { $valid = false; $erreur = 'Erreur lors du transfert'; } } if($valid) { $path_to_image = 'images/fullsize/'; $path_to_min = 'images/min/'; $filename = sha1(uniqid($avatar_name)); $source = $avatar['tmp_name']; $target = $path_to_image . $filename. '.'. $ext; move_uploaded_file($source,$target); if($ext == 'jpg' || $ext == 'jpeg') {$im = imagecreatefromjpeg($path_to_image.$filename.'.'.$ext);} if($ext == 'png') {$im = imagecreatefrompng($path_to_image.$filename.'.'.$ext);} if($ext == 'gif') { $im = imagecreatefromgif($path_to_image.$filename.'.'.$ext);} $ox = imagesx($im); $oy = imagesy($im); $nx = 400; $ny = floor($oy *($nx/$ox)); $nm = imagecreatetruecolor($nx,$ny); imagecopyresized($nm, $im, 0,0,0,0, $nx,$ny,$ox,$oy); imagejpeg($nm, $path_to_min.$filename.'.'.$ext); $nom_image = $filename.'.'.$ext; $req = $bdd->prepare('INSERT INTO upload(nom) VALUES(:nom)'); $req->execute(array('nom'=>$nom_image)); $req->closeCursor(); $success = 'Upload ok'; } }