Lorsque vous construisez une application web avec Laravel (ou tout autre framework basé sur PHP) où les utilisateurs téléchargeront des images, vous aurez probablement recours à une bibliothèque de code pour manipuler et traiter ces images. Avec les appareils photo des téléphones portables qui capturent des images plus grandes et de meilleure résolution, les images brutes qui sont téléchargées pourraient rapidement remplir l’espace disponible sur le disque dur et causer des problèmes de performance sur le site web.
Bien que PHP dispose de bibliothèques de traitement d’images comme GD et Imagick, celles-ci ne sont pas toujours faciles à utiliser. Il existe un certain nombre de bibliothèques tierces qui facilitent le traitement des images.
Dans cet article, nous utiliserons Spatie Image, une bibliothèque de traitement d’images PHP développée par Spatie, qui crée un certain nombre de bibliothèques à code source libre pour Laravel et PHP. Elle offre une interface facile à utiliser pour les manipulations d’images courantes comme le redimensionnement, le recadrage et l’ajout d’effets.
Table des matières
Installation et utilisation de base
L’installation se fait à l’aide d’une commande composer assez simple :
composer require Spatie Image
Vous pouvez ensuite utiliser la classe Image
pour charger et manipuler des images.
use Spatie\Image\Image;
$image = Image::load('example.jpg)
->width(50)
->save();
save
Appeler save sans aucun paramètre écrasera le fichier existant. Pour enregistrer dans un nouveau fichier, il faut passer le chemin du nouveau fichier à la méthode save
. Il est possible d’enregistrer dans un format de fichier différent en changeant l’extension.
use Spatie\Image\Image;
$image = Image::load('example.jpg)
->save('example.png');
Redimensionner une image en PHP
Spatie Image propose plusieurs façons de redimensionner une image.
Largeur et hauteur
Les fonctions width
et height
prennent les dimensions souhaitées en pixels comme paramètres et redimensionnent l’image en conséquence. L’image redimensionnée sera contenue dans les dimensions $width
et $height
données en respectant le rapport d’aspect d’origine.
Image::load('example.png')
->width(300)
->height(250)
->save();
Redimensionner
La fonction resize agit comme un raccourci, permettant de définir la largeur et la hauteur à l’aide d’une seule méthode.
Image::load('example.png')
->resize(300, 250)
->save();
Ajuster
La fonction Fit te permet de redimensionner l’image à une largeur et une hauteur données, mais donne un peu plus de contrôle sur la façon dont l’image est redimensionnée.
Fit::Contain
redimensionne l’image pour qu’elle tienne dans les limites de la largeur et de la hauteur sans la recadrer, la déformer ou modifier le rapport hauteur/largeur.Fit::Max
redimensionne l’image pour qu’elle tienne dans les limites de la largeur et de la hauteur sans la recadrer, la déformer ou modifier le rapport hauteur/largeur, et n’augmente pas la taille de l’image si elle est plus petite que la taille de sortie.Fit::Fill
redimensionne l’image pour qu’elle tienne dans les limites de la largeur et de la hauteur sans la recadrer ni la déformer, et remplit l’espace restant avec la couleur d’arrière-plan (définie à l’aide de la fonctionbackground
). L’image résultante correspondra aux dimensions imposées.Fit::Stretch
étire l’image pour qu’elle corresponde exactement aux dimensions imposées. L’image résultante remplira les dimensions et ne conservera pas le rapport d’aspect de l’image d’entrée.Fit::Crop
redimensionne l’image pour qu’elle remplisse les limites de largeur et de hauteur et recadre les données excédentaires de l’image. L’image résultante correspondra aux contraintes de largeur et de hauteur sans déformer l’image.
Recadrer
En appelant la méthode crop
, une partie de l’image sera recadrée aux dimensions $width
et $height
données (pixels). Le paramètre $cropMethod
permet de spécifier quelle partie sera recadrée.
Les valeurs CropPosition
s suivantes sont disponibles dans l’énumération : TopLeft
, Top
, TopRight
, Left
, Center
, Right
, BottomLeft
, Bottom
, BottomRight
.
Image::load('example.jpg')
->crop(250, 250, CropPosition::TopRight)
->save();
Manipulation de l’image
Spatie Image propose un certain nombre d’autres méthodes pour manipuler une image.
Ajustements
Pour régler la luminosité, le contraste et le gamma de l’image.
Image::load('example.jpg')
->brightness(-20)
->save();
Effets
Pour ajouter des effets tels que flou, pixellisation, niveaux de gris et sépia à l’image.
Image::load('example.jpg')
->blur(20)
->save();
Filigrane
Pour ajouter une autre image en filigrane sur l’image.
Image::load('example.jpg')
->watermark('watermark.png', AlignPosition::center)
->save();
Texte
Pour ajouter du texte à l’image.
Image::load('example.jpg')
->text('Hello!')
->save();
Bien sûr, il est possible de combiner toutes ces manipulations en un seul appel. Par exemple, pour créer une version petite de l’image en niveaux de gris, nous pourrions faire quelque chose comme ceci :
Image::load('example.jpg')
->resize(64, 64)
->greyscale()
->brighten(20)
->save();
Vous pouvez consulter la documentation ici pour plus de détails sur cette bibliothèque de code.