function Rotate::validateArguments

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::validateArguments()
  2. 10 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\Rotate::validateArguments()
  3. 11.x core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\Rotate::validateArguments()

Overrides ImageToolkitOperationBase::validateArguments

File

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

Class

Rotate
Defines GD2 rotate operation.

Namespace

Drupal\system\Plugin\ImageToolkit\Operation\gd

Code

protected function validateArguments(array $arguments) {
    // PHP 5.5 GD bug: https://bugs.php.net/bug.php?id=65148: To prevent buggy
    // behavior on negative multiples of 90 degrees we convert any negative
    // angle to a positive one between 0 and 360 degrees.
    $arguments['degrees'] -= floor($arguments['degrees'] / 360) * 360;
    // Validate or set background color argument.
    if (!empty($arguments['background'])) {
        // Validate the background color: Color::hexToRgb does so for us.
        $background = Color::hexToRgb($arguments['background']) + [
            'alpha' => 0,
        ];
    }
    else {
        // Background color is not specified: use transparent white as background.
        $background = [
            'red' => 255,
            'green' => 255,
            'blue' => 255,
            'alpha' => 127,
        ];
    }
    // Store the color index for the background as that is what GD uses.
    $arguments['background_idx'] = imagecolorallocatealpha($this->getToolkit()
        ->getResource(), $background['red'], $background['green'], $background['blue'], $background['alpha']);
    if ($this->getToolkit()
        ->getType() === IMAGETYPE_GIF) {
        // GIF does not work with a transparency channel, but can define 1 color
        // in its palette to act as transparent.
        // Get the current transparent color, if any.
        $gif_transparent_id = imagecolortransparent($this->getToolkit()
            ->getResource());
        if ($gif_transparent_id !== -1) {
            // The gif already has a transparent color set: remember it to set it on
            // the rotated image as well.
            $arguments['gif_transparent_color'] = imagecolorsforindex($this->getToolkit()
                ->getResource(), $gif_transparent_id);
            if ($background['alpha'] >= 127) {
                // We want a transparent background: use the color already set to act
                // as transparent, as background.
                $arguments['background_idx'] = $gif_transparent_id;
            }
        }
        else {
            // The gif does not currently have a transparent color set.
            if ($background['alpha'] >= 127) {
                // But as the background is transparent, it should get one.
                $arguments['gif_transparent_color'] = $background;
            }
        }
    }
    return $arguments;
}

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