Laravel : Manipuler les images avec Intervention image

Mis à jour il y a 4 mois

Wilo Ahadi

Auteur

Wilo Ahadi

Technologies

Découvrez comment traiter les images (redimensionner, rogner, colorier, composer, ...) avec le package Intervention/Image dans un projet Laravel

Introduction

Intervention Image est une bibliothèque (library) PHP open source qui permet de manipuler et traiter les images : créer, modifier, redimensionner, rogner, colorier, composer une image, ...

Pour travailler avec les images, intervention/image a besoin des éléments suivants :

  • PHP >= 5.4
  • L'extension Fileinfo activé
  • La bibliothèque GD (>=2.0) ou l'extension PHP Imagick (>=6.5.7)

La capture ci-dessous montre les extensions fileinfo et gd2 activés dans mon fichier de configuration php.ini :

Extensions fileinfo et gd2 activés dans php.ini

Annonce :

Importer, intégrer et configurer Intervention Image

Voici les étapes à suivre pour importer, intégrer et configurer le package Intervention Image dans un projet Laravel :

1. Importation

Placez-vous dans la console à la racine du projet, exécutez la commande suivante pour importer Intervention Image et ses dépendances :

composer require intervention/image

Installation d'intervention/image par composer

2. Intégration

Pour intégrer intervention/image dans le projet après l'avoir importé, ouvrez le fichier de configuration config/app.php, ajoutez le service provider de la bibliothèque au tableau $providers :

Intervention\Image\ImageServiceProvider::class

Puis la façade ("Image" pour faire court) au tableau $aliases :

'Image' => Intervention\Image\Facades\Image::class

 

3. Configuration

Pour modifier la configuration par défaut d'Intervention Image, publiez le fichier de configuration en exécutant la commande :

php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"

Ce qui nous donne le fichier config/image.php où nous pouvons par exemple modifier l'extension PHP "gd" de traitement d'images par défaut en "imagick" :

'driver' => 'imagick'

La documentation PHP explique comment installer/configurer ImageMagick : https://www.php.net/manual/fr/imagick.setup.php

Utiliser Intervention Image

L'API Intervention Image propose des nombreuses fonctions. La documentation les liste toutes là : http://image.intervention.io

Nous allons exploiter quelques-unes d'entre elles pour :

  • Obtenir les informations d'une image
  • Redimensionner une image

Pour ce faire, montons un formulaire d'upload d'image :

<form method="POST" action="{{ route('processing') }}" enctype="multipart/form-data" >
		{{ csrf_field() }}
		<input type="file" name="picture" >
		{{ $errors->first('picture', ':message') }}
		<input type="submit" value="Valider" >
	</form>

L'action (POST) de ce formulaire est traitée par la route "processing" qu'on retrouve au fichier routes/web.php :

Route::post("processing", "PictureController@processing")->name('processing');

La méthode "processing" du contrôleur "PictureController" décrit les instructions à exécuter. C'est dans cette méthode que nous allons maintenant manipuler l'image uploadée :

1. Obtenir les informations d'une image

Affichons sur la page les informations (height, width, mime, size) de l'image uploadée :

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

use Image;

class PictureController extends Controller
{

    // Le traitement de l'image uploadée
    public function processing (Request $request) {

    	// Validation de l'image
    	$this->validate($request, [
    		'picture' => "bail|required|image"
    	]);

        // Créer une ressource de l'image
    	$image = Image::make($request->picture);

    	// Les informations de l'image
    	dd("Taille : ".$image->width()." x ".$image->height()." px - Mime : ".$image->mime()." - Size : ".$image->filesize());

    }

}

 

2. Redimensionner une image

Créons la miniature (120 x 80 px) de l'image uploadée puis enregistrons-la dans le dossier "public/images/" sous le nom de "miniature.jpg" :

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

use Image;

class PictureController extends Controller
{

    // Le traitement de l'image uploadée
    public function processing (Request $request) {

    	// Validation de l'image
    	$this->validate($request, [
    		'picture' => "bail|required|image"
    	]);

        // Créer une ressource de l'image
    	$image = Image::make($request->picture);
    	
    	$image->resize(120, 80); // Redimensionnement de l'image à 120 x 80 px
    	$image->save(public_path()."/images/miniature.jpg"); // Enregistrement de l'image

    }

}

 

Annonce :
Wilo Ahadi
Wilo Ahadi, l'auteur

Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, Infographiste et designer, ... J'aime partager mon expérience en formant sur Akili School

Voir mon profil Suivre