Same name and namespace in other branches
  1. 8.9.x core/modules/image/src/Entity/ImageStyle.php \Drupal\image\Entity\ImageStyle::createDerivative()
  2. 9 core/modules/image/src/Entity/ImageStyle.php \Drupal\image\Entity\ImageStyle::createDerivative()

Creates a new image derivative based on this image style.

Generates an image derivative applying all image effects and saving the resulting image.

Parameters

string $original_uri: Original image file URI.

string $derivative_uri: Derivative image file URI.

Return value

bool TRUE if an image derivative was generated, or FALSE if the image derivative could not be generated.

Overrides ImageStyleInterface::createDerivative

File

core/modules/image/src/Entity/ImageStyle.php, line 314

Class

ImageStyle
Defines an image style configuration entity.

Namespace

Drupal\image\Entity

Code

public function createDerivative($original_uri, $derivative_uri) {

  // If the source file doesn't exist, return FALSE without creating folders.
  $image = $this
    ->getImageFactory()
    ->get($original_uri);
  if (!$image
    ->isValid()) {
    return FALSE;
  }

  // Get the folder for the final location of this style.
  $directory = \Drupal::service('file_system')
    ->dirname($derivative_uri);

  // Build the destination folder tree if it doesn't already exist.
  if (!\Drupal::service('file_system')
    ->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS)) {
    \Drupal::logger('image')
      ->error('Failed to create style directory: %directory', [
      '%directory' => $directory,
    ]);
    return FALSE;
  }
  foreach ($this
    ->getEffects() as $effect) {
    $effect
      ->applyEffect($image);
  }
  if (!$image
    ->save($derivative_uri)) {
    if (file_exists($derivative_uri)) {
      \Drupal::logger('image')
        ->error('Cached image file %destination already exists. There may be an issue with your rewrite configuration.', [
        '%destination' => $derivative_uri,
      ]);
    }
    return FALSE;
  }
  return TRUE;
}