Créer une vignette dans Laravel à l’aide de la bibliothèque d’images d’intervention
Sur le site Web, nous nous occupons toujours des images. En fonction des besoins, nous utilisons différentes versions d’images. C’est une bonne pratique pour les développeurs de créer différentes versions, c’est-à-dire des vignettes de l’image unique. Ces vignettes peuvent être utilisées tout en affichant différentes tailles d’images en fonction de la taille du conteneur. L’affichage d’une image adaptée à la taille du conteneur économisera de la bande passante et améliorera le temps de chargement de la page. Afficher une image de grande taille dans un petit conteneur est une mauvaise pratique et compromet le temps de chargement de la page. Par conséquent, il est recommandé de créer plusieurs vignettes d’une image et d’utiliser la version appropriée si nécessaire.
Dans cet article, nous étudions comment créer une vignette dans Laravel à l’aide de la bibliothèque d’images d’intervention. Intervention Image est gratuite et l’une des bibliothèques populaires pour la manipulation d’images. En arrière-plan, cette bibliothèque utilise la bibliothèque GD et Imagick pour la manipulation d’images.
Pour ce tutoriel, je vais créer 3 vignettes – petite, moyenne, grande avec les tailles 150 93, 300*185, 550 340 respectivement. Modifiez ces tailles selon vos besoins.
Commencer
Pour commencer, vous devez d’abord installer la bibliothèque d’images d’intervention dans Laravel. Ouvrez le terminal dans le répertoire racine de votre projet et exécutez la commande ci-dessous :
composer require intervention/image
Après avoir installé la bibliothèque, ouvrez le config/app.php
fichier et ajoutez-y les lignes suivantes.
Ajoutez les fournisseurs de services pour ce package dans le $providers
tableau.
InterventionImageImageServiceProvider::class
Ajoutez la façade au $aliases
tableau.
'Image' => InterventionImageFacadesImage::class
Ensuite, pour stocker les images, nous devons créer un répertoire. Rendez-vous sur le terminal et exécutez la commande comme suit :
php artisan storage:link
Cette commande crée un répertoire de stockage (lien symbolique) sous le dossier public. Dans ce dossier, je vais télécharger l’image originale et ses vignettes.
Créer une vignette dans Laravel
Nous avons tous réglé avec la configuration de base et pouvons maintenant écrire le code réel. Créons un formulaire dans votre fichier de vue.
<form action="{{ url('PASS_ACTION_URL') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image" id="exampleInputFile">
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Dans le contrôleur, vous devez ajouter la façade de la bibliothèque ‘Image’ que nous avons ajoutée dans le config/app.php
fichier.
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Image;
class ImageController extends Controller
{
}
En ajoutant la façade, nous pouvons appeler des fonctions de la bibliothèque d’images d’intervention. Dans le code ci-dessous, je vais télécharger l’image à deux endroits. L’image originale va directement dans le storage/profile_images
dossier. Les vignettes seraient stockées dans le storage/profile_images/thumbnail
répertoire. 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')) {
//get filename with extension
$filenamewithextension = $request->file('profile_image')->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->file('profile_image')->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.time().'.'.$extension;
//small thumbnail name
$smallthumbnail = $filename.'_small_'.time().'.'.$extension;
//medium thumbnail name
$mediumthumbnail = $filename.'_medium_'.time().'.'.$extension;
//large thumbnail name
$largethumbnail = $filename.'_large_'.time().'.'.$extension;
//Upload File
$request->file('profile_image')->storeAs('public/profile_images', $filenametostore);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $smallthumbnail);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $mediumthumbnail);
$request->file('profile_image')->storeAs('public/profile_images/thumbnail', $largethumbnail);
//create small thumbnail
$smallthumbnailpath = public_path('storage/profile_images/thumbnail/'.$smallthumbnail);
$this->createThumbnail($smallthumbnailpath, 150, 93);
//create medium thumbnail
$mediumthumbnailpath = public_path('storage/profile_images/thumbnail/'.$mediumthumbnail);
$this->createThumbnail($mediumthumbnailpath, 300, 185);
//create large thumbnail
$largethumbnailpath = public_path('storage/profile_images/thumbnail/'.$largethumbnail);
$this->createThumbnail($largethumbnailpath, 550, 340);
return redirect('image')->with('success', "Image uploaded successfully.");
}
}
Dans le code ci-dessus, je stocke l’image avec 3 formats petit, moyen et grand. Après les avoir stockées, nous appelons la méthode createThumbnail
et passons la largeur et la hauteur requises à la méthode. Définissons cette fonction ci-dessous. Cette fonction doit aller dans le même contrôleur.
/**
* Create a thumbnail of specified size
*
* @param string $path path of thumbnail
* @param int $width
* @param int $height
*/
public function createThumbnail($path, $width, $height)
{
$img = Image::make($path)->resize($width, $height, function ($constraint) {
$constraint->aspectRatio();
});
$img->save($path);
}
Ici, nous redimensionnons l’image proportionnellement. Ce faisant, nous gardons le rapport hauteur/largeur et l’image ne sera pas coupée.
Si vous recherchez un recadrage difficile, remplacez les lignes ci-dessous
$img = Image::make($path)->resize($width, $height, function ($constraint) {
$constraint->aspectRatio();
});
$img->save($path);
Avec
$img = Image::make($path)->resize($width, $height)->save($path);
J’espère que vous comprendrez comment créer une vignette dans Laravel à l’aide de la bibliothèque d’images d’intervention. J’aimerais entendre vos pensées dans la section des commentaires ci-dessous.
Articles Liés
- Redimensionner l’image dans Laravel à l’aide de la bibliothèque d’images d’intervention
- Un guide pour télécharger et compresser des images dans Laravel
- Télécharger et redimensionner plusieurs images dans Laravel