Comment générer des images en D8

Il arrive parfois que l'on souhaite générer en code soit même les images à partir d'un imagestyle spécifique. Nous venons d'ailleurs de le faire dans un projet afin de créer un diaporama personnalisé.  Dans ce cas précis, l'écriture d'un bloc en code était plus simple et plus léger que l'utilisation de Views.

 

Premièrement, dans votre code, vous utiliserez la classe ImageStyle 

 

use Drupal\image\Entity\ImageStyle;

 

Ensuite, supposons que vous souhaitiez récupérer les images téléchargées dans le noeud en cours d'affichage :

 

    // Load the current node.

    $node = \Drupal::routeMatch()->getParameter('node');

    // If node exists

    if ($node) {

      // if node has images

      if(!empty($node->field_images)){

        $images = $node->field_images;

        foreach($images as $image){

           // We get the value of URI

          $image_uri = $image->entity->uri->value;

          // Then we generate derivatives. Our imagestyle is called carousel. 
          // You could use your own or "thumbnail", "medium" and "large" that are created 
          // with the standard Drupal installation. After that it's up to you 
          // to output the $image_url generated.

          $image_url = ImageStyle::load('carousel')->buildUrl($image_uri);

        }

      }

    }