5

I have a module that create custom PDF with multiple selected nodes and I use the below function to create the link to styled images:

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

Unfortunately, the image itself is not created, only the link, which is ok if I display it on a simple webpage because Drupal will create it on the fly when needed but on a PDF it cause errors because the image it not found before the PDF could be displayed.

Is there a programmatically way to create this image ?

Thanks.

7

You need to execute createDerivative() on 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);

Docs: https://api.drupal.org/api/drupal/core%21modules%21image%21src%21Entity%21ImageStyle.php/function/ImageStyle%3A%3AcreateDerivative/8.6.x

For Drupal 7 there is 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);

Docs: https://api.drupal.org/api/drupal/modules%21image%21image.module/function/image_style_create_derivative/7.x

  • Thanks! @quex, really helped me! – aserww106 May 17 at 5:53
  • 1
    to @quex - there is typo in answer: $destination = $image_style->buildUrl($file->uri->value); Not buildUrl but buildUri - 'i' at the end. About one hour debuged this case. By the way, thank You for solution, works! – Sergey Serov May 27 at 17:05
  • Thanks @SergeySerov – quex May 28 at 9:52
2

This can be achieved with Image Style Warmer module which is available for D8. Worked perfectly for me! This might help other people, who are trying to find a solution.

The Image Style Warmer module provides options to create image styles during upload or via queue worker. So configured image derivates already exists when they are requested.

  • Pre-generate configured image styles on image upload or crop change.
  • Pre-generate configured image styles via queue worker.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.