Envoie d'images

Salut !


On m'a souvent demander comment dire a l'utilisateur : ho la la ton image est trop grande t'es ouf


C'est pas simple parce qu'on l'utilise pas toujours mais voici comment envoyé son image !! (pour l'utilisateur borné qui veux pourrir le design avec des images en 4k)


On utilise donc getimagesize()


Ici je demande des images de 1140x315 parce que c'est la taille de mon carrousel ( c'est mon exemple pour mon administration ) ça fonctionne tel quelle juste a définir le $tmp_name sinon vous n'avez rien a toucher sauf vos propre if on pourrais même le mettre dans une fonction avec 2 paramètre width et heigh comme ça, ça fonctionnera pour tout vos formulaire.


On fais un foreach oui oui !!


 foreach($tmp_name as $single_file){
    if(!empty($single_file)) {
      $imageinfo[$single_file] = getimagesize($single_file);
      if($imageinfo[$single_file][0] > 1140){
        setFlash('<strong>Il faut une largeur de 1140px sur 315px</strong>','orange');
        redirect($router->generate('upload'));
      }
      if($imageinfo[$single_file][1] > 315){
        setFlash('<strong>Il faut une largeur de 1140px sur 315px</strong>','orange');
        redirect($router->generate('upload'));
      }
    }
  }


Et quand tout ce passe bien vous pouvez move_uploaded_file($image['tmp_name'], IMAGES . '/'.$folder.'/' . $image_name); et envoyez en base de donnée... le folder représente le dossier de destination et IMAGES c'est ma constante du chemin absolut de mon dossier.


define('WWW_ROOT', dirname(dirname(__FILE__)));
define('IMAGES', WWW_ROOT . DIRECTORY_SEPARATOR . 'public'.DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'img');


On fais donc les traitements et ont envoies tout ça !!


$files = $_FILES['images'];
$images = []; 

foreach($files['tmp_name'] as $k => $v){
 $image = [
     'name' => $files['name'][$k],
     'tmp_name' => $files['tmp_name'][$k]
 ];
 $extension = pathinfo($image['name'], PATHINFO_EXTENSION);
     if(in_array($extension, ['jpg','png'])){
			//vos requetes ici 
     }
}


vous pouvez comme ça filtré par taille poids etc, parce que oui on peut ciblé les images en CSS mais le problème c'est que c'est qu'une re-dimension visuel l'image fera toujours 4k et alourdira vos pages.


si vous-vous demander pourquoi un foreach


Parce que, je peut, si je veux, envoyez plusieurs images : (beaucoup de virgule lol)


<script>
  (function($){

    $('#duplicatebtn').click(function(e){
      e.preventDefault();
      var $clone = $('#duplicate').clone().attr('id', '').removeClass('hidden');
      $('#duplicate').before($clone);
    })

  })(jQuery);
</script>

<div class="form-group">
    <input type="file" name="images[]" class="btn btn-info">
    <input type="file" name="images[]" style="margin-top:10px;" class="btn btn-primary hidden" id="duplicate">
</div>


PS : si les images sont plus petite c'est pas gênant tant quelles ne dépassent pas les conditions, donc pas besoin de faire une vérification strict... Mais je me troll parce que il y a des redimensionneurs d'images tout fait sur packagist, mais au moins vous savez comment faire.

365 vues
03 juin 2022 à 12:11 (Édité)
Cette pub permet au site de vivre ...

2 commentaires

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !
@Clouder Par contre, tu n'utilises pas de fonction pour réduire la taille de ton image ?


J'ai fait le tuto en dur directement mon application est spécial j'ai du enlever des trucs, comme ça tout le monde peux comprendre.

Salut @neecride


JE trouve que tu as fait un bon tuto !

Perso je pars sur une taille min (width et hight) et une taille max (width et hight) de l'image.


Par contre, tu n'utilises pas de fonction pour réduire la taille de ton image ?

Cette pub permet au site de vivre ...