Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Télécharger et redimensionner plusieurs images dans Laravel

142

En dehors de ce blog, je dirige une chaîne YouTube où je partage les didacticiels vidéo. Récemment, l’un des abonnés de la chaîne YouTube a demandé s’il fallait redimensionner plusieurs images dans Laravel. Ils veulent redimensionner plusieurs images en une seule fois. Dans cet article, nous étudions comment télécharger et redimensionner plusieurs images dans Laravel.

Intervention Image est une bibliothèque open source qui nous permet de manipuler des images. Je vais utiliser cette bibliothèque pour redimensionner les images.

Télécharger et redimensionner plusieurs images dans Laravel

Commencer

Pour atteindre notre objectif, vous devez installer et configurer la bibliothèque d’images d’intervention dans le projet Laravel. Ouvrez le terminal dans le répertoire racine de votre projet et exécutez la commande :

composer require intervention/image

Une fois la librairie installée, ouvrez le config/app.phpfichier et ajoutez des prestataires, façade dedans. Ajoutez les fournisseurs de services de ce package au $providerstableau.

InterventionImageImageServiceProvider::class,

Ajoutez la façade au $aliasestableau.

'Image' => InterventionImageFacadesImage::class,

Ensuite, nous avons besoin d’un répertoire où nous stockons nos fichiers téléchargés. Laravel Filesystem fournit un disque public pour stocker les fichiers. Le disque public contient des fichiers accessibles au public. Vous trouverez les fichiers téléchargés dans le storage/app/publicdossier. Pour accéder à ces fichiers sur le Web, vous devez créer un lien symbolique de public/storageà storage/app/public.

Créez un lien symbolique à l’aide de la commande :

php artisan storage:link

Cette commande créerait un dossier de stockage sous le répertoire public. C’est là que nous stockons nos fichiers.

Télécharger et redimensionner des images dans Laravel

Pour télécharger des fichiers sur un serveur, vous avez besoin d’un formulaire. Créons un formulaire où vous pouvez sélectionner plusieurs fichiers à télécharger sur un serveur. Vous trouverez ci-dessous un exemple de code du formulaire qui ira à l’intérieur de votre fichier de vue.

<form action="{{ url('ROUTE HERE') }}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="profile_image[]" id="exampleInputFile" multiple />
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

Dans le formulaire, j’ai pris un nom d’entrée de fichier comme ‘profile_image[]’ qui envoie un tableau de fichiers au serveur. Aussi, j’ai ajouté un attribut ‘multiple’ qui nous permet de sélectionner plusieurs fichiers. Remplacez l’espace réservé ROUTE_URL par votre valeur réelle.

Comme nous devons télécharger et redimensionner les images, dans le contrôleur, ajoutez deux façades comme suit.

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use Image; //Intervention Image
use IlluminateSupportFacadesStorage; //Laravel Filesystem
 
class ImageController extends Controller
{
 
}

En ajoutant la façade, vous pouvez appeler les fonctions de redimensionnement de la bibliothèque d’images d’intervention. Dans le code ci-dessous, je vais télécharger les fichiers à deux endroits. L’un est l’image originale. Le second se trouve sous le répertoire des vignettes. Nous téléchargeons d’abord l’image originale dans le dossier des vignettes, puis la redimensionnons.

public function store(Request $request)
{
    if ($request->hasFile('profile_image')) {
 
        foreach($request->file('profile_image') as $file){
 
            //get filename with extension
            $filenamewithextension = $file->getClientOriginalName();
 
            //get filename without extension
            $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
            //get file extension
            $extension = $file->getClientOriginalExtension();
 
            //filename to store
            $filenametostore = $filename.'_'.uniqid().'.'.$extension;
 
            Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));
            Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));
 
            //Resize image here
            $thumbnailpath = public_path('storage/profile_images/thumbnail/'.$filenametostore);
            $img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
                $constraint->aspectRatio();
            });
            $img->save($thumbnailpath);
        }
 
        return redirect('ROUTE_URL')->with('success', "Image uploaded successfully.");
    }
}

Ici, nous redimensionnons l’image proportionnellement. Ce faisant, nous gardons le rapport hauteur/largeur et l’image ne sera pas coupée. Je passe la largeur à 400 et la hauteur à 150. Vous pouvez modifier ces valeurs selon vos besoins.

Allez-y et testez-le. Vous obtiendrez la version redimensionnée des images téléchargées dans le répertoire ‘storage/profile_images/thumbnail’.

Si vous recherchez un recadrage difficile, remplacez les lignes ci-dessous

$img = Image::make($thumbnailpath)->resize(400, 150, function($constraint) {
    $constraint->aspectRatio();
});
$img->save($thumbnailpath);

Avec

$img = Image::make($thumbnailpath)->resize(100, 100)->save($thumbnailpath);

J’espère que vous comprenez comment télécharger et redimensionner plusieurs images dans Laravel. S’il vous plaît partager vos pensées et suggestions dans la section commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails