Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
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.
@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 ?