function Rotate::execute

Same name in other branches
  1. 8.9.x core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\Rotate::execute()
  2. 10 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\Rotate::execute()
  3. 11.x core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\Rotate::execute()

Overrides ImageToolkitOperationBase::execute

File

core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php, line 89

Class

Rotate
Defines GD2 rotate operation.

Namespace

Drupal\system\Plugin\ImageToolkit\Operation\gd

Code

protected function execute(array $arguments) {
    // PHP installations using non-bundled GD do not have imagerotate.
    if (!function_exists('imagerotate')) {
        $this->logger
            ->notice('The image %file could not be rotated because the imagerotate() function is not available in this PHP installation.', [
            '%file' => $this->getToolkit()
                ->getSource(),
        ]);
        return FALSE;
    }
    // Stores the original GD resource.
    $original_res = $this->getToolkit()
        ->getResource();
    if ($new_res = imagerotate($this->getToolkit()
        ->getResource(), 360 - $arguments['degrees'], $arguments['background_idx'])) {
        $this->getToolkit()
            ->setResource($new_res);
        imagedestroy($original_res);
        // GIFs need to reassign the transparent color after performing the
        // rotate, but only do so, if the image already had transparency of its
        // own, or the rotate added a transparent background.
        if (!empty($arguments['gif_transparent_color'])) {
            $transparent_idx = imagecolorexactalpha($this->getToolkit()
                ->getResource(), $arguments['gif_transparent_color']['red'], $arguments['gif_transparent_color']['green'], $arguments['gif_transparent_color']['blue'], $arguments['gif_transparent_color']['alpha']);
            imagecolortransparent($this->getToolkit()
                ->getResource(), $transparent_idx);
        }
        return TRUE;
    }
    return FALSE;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.