web-dev-qa-db-fra.com

Créer une image stylisée par programme

J'ai un module qui crée un PDF avec plusieurs nœuds sélectionnés et j'utilise la fonction ci-dessous pour créer le lien vers des images stylisées:

$file = File::load($img_id);
$imagesPath[] = ImageStyle::load('550x300')->buildUrl($file->uri->value);

Malheureusement, l'image elle-même n'est pas créée, seul le lien, ce qui est correct si je l'affiche sur une simple page Web car Drupal le créera à la volée en cas de besoin mais sur un PDF cela provoque des erreurs car l'image introuvable avant le PDF peut être affichée.

Existe-t-il un moyen par programme de créer cette image?

Merci.

6
Leeroy521

Vous devez exécuter createDerivative() sur ImageStyle.

$image_style = ImageStyle::load('550x300');

$file = File::load($img_id);
$image_uri = $file->getFileUri();
$destination_uri = $image_style->buildUri($file->uri->value);
$image_style->createDerivative($image_uri, $destination_uri);

Pour Drupal 7 il y a image_style_create_derivative() :

$style = image_style_load('550x300');

$file = file_load($img_id);
$image_uri = $file->uri;
$destination = image_style_path($style['name'], $image_uri);
image_style_create_derivative($style, $image_uri, $destination);
12
quex

Ceci peut être réalisé avec le module Image Style Warmer qui est disponible pour D8. A parfaitement fonctionné pour moi! Cela pourrait aider d'autres personnes qui essaient de trouver une solution.

Le module Image Style Warmer fournit des options pour créer des styles d'image lors du téléchargement ou via le file d'attente. Les dérivés d'images configurés existent donc déjà lorsqu'ils sont demandés.

  • Pré-générer des styles d'image configurés lors du téléchargement d'image ou du changement de recadrage.
  • Pré-générez des styles d'images configurés via le gestionnaire de files d'attente.
3
Nicky