class CreateNew

Same name in other branches
  1. 9 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/CreateNew.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\CreateNew
  2. 10 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/CreateNew.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\CreateNew
  3. 11.x core/modules/system/src/Plugin/ImageToolkit/Operation/gd/CreateNew.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\CreateNew

Defines GD2 create_new image operation.

Plugin annotation


@ImageToolkitOperation(
  id = "gd_create_new",
  toolkit = "gd",
  operation = "create_new",
  label = @Translation("Set a new image"),
  description = @Translation("Creates a new transparent resource and sets it for the image.")
)

Hierarchy

Expanded class hierarchy of CreateNew

File

core/modules/system/src/Plugin/ImageToolkit/Operation/gd/CreateNew.php, line 18

Namespace

Drupal\system\Plugin\ImageToolkit\Operation\gd
View source
class CreateNew extends GDImageToolkitOperationBase {
    
    /**
     * {@inheritdoc}
     */
    protected function arguments() {
        return [
            'width' => [
                'description' => 'The width of the image, in pixels',
            ],
            'height' => [
                'description' => 'The height of the image, in pixels',
            ],
            'extension' => [
                'description' => 'The extension of the image file (e.g. png, gif, etc.)',
                'required' => FALSE,
                'default' => 'png',
            ],
            'transparent_color' => [
                'description' => 'The RGB hex color for GIF transparency',
                'required' => FALSE,
                'default' => '#ffffff',
            ],
            'is_temp' => [
                'description' => 'If TRUE, this operation is being used to create a temporary image by another GD operation. After performing its function, the caller is responsible for destroying the original GD resource.',
                'required' => FALSE,
                'default' => FALSE,
            ],
        ];
    }
    
    /**
     * {@inheritdoc}
     */
    protected function validateArguments(array $arguments) {
        // Assure extension is supported.
        if (!in_array($arguments['extension'], $this->getToolkit()
            ->getSupportedExtensions())) {
            throw new \InvalidArgumentException("Invalid extension ('{$arguments['extension']}') specified for the image 'create_new' operation");
        }
        // Assure integers for width and height.
        $arguments['width'] = (int) round($arguments['width']);
        $arguments['height'] = (int) round($arguments['height']);
        // Fail when width or height are 0 or negative.
        if ($arguments['width'] <= 0) {
            throw new \InvalidArgumentException("Invalid width ('{$arguments['width']}') specified for the image 'create_new' operation");
        }
        if ($arguments['height'] <= 0) {
            throw new \InvalidArgumentException("Invalid height ({$arguments['height']}) specified for the image 'create_new' operation");
        }
        // Assure transparent color is a valid hex string.
        if ($arguments['transparent_color'] && !Color::validateHex($arguments['transparent_color'])) {
            throw new \InvalidArgumentException("Invalid transparent color ({$arguments['transparent_color']}) specified for the image 'create_new' operation");
        }
        return $arguments;
    }
    
    /**
     * {@inheritdoc}
     */
    protected function execute(array $arguments) {
        // Get the image type.
        $type = $this->getToolkit()
            ->extensionToImageType($arguments['extension']);
        // Store the original GD resource.
        $original_res = $this->getToolkit()
            ->getResource();
        // Create the resource.
        if (!($res = imagecreatetruecolor($arguments['width'], $arguments['height']))) {
            return FALSE;
        }
        // Fill the resource with transparency as possible.
        switch ($type) {
            case IMAGETYPE_PNG:
                imagealphablending($res, FALSE);
                $transparency = imagecolorallocatealpha($res, 0, 0, 0, 127);
                imagefill($res, 0, 0, $transparency);
                imagealphablending($res, TRUE);
                imagesavealpha($res, TRUE);
                break;
            case IMAGETYPE_GIF:
                if (empty($arguments['transparent_color'])) {
                    // No transparency color specified, fill white transparent.
                    $fill_color = imagecolorallocatealpha($res, 255, 255, 255, 127);
                }
                else {
                    $fill_rgb = Color::hexToRgb($arguments['transparent_color']);
                    $fill_color = imagecolorallocatealpha($res, $fill_rgb['red'], $fill_rgb['green'], $fill_rgb['blue'], 127);
                    imagecolortransparent($res, $fill_color);
                }
                imagefill($res, 0, 0, $fill_color);
                break;
            case IMAGETYPE_JPEG:
                imagefill($res, 0, 0, imagecolorallocate($res, 255, 255, 255));
                break;
        }
        // Update the toolkit properties.
        $this->getToolkit()
            ->setType($type);
        $this->getToolkit()
            ->setResource($res);
        // Destroy the original resource if it is not needed by other operations.
        if (!$arguments['is_temp'] && is_resource($original_res)) {
            imagedestroy($original_res);
        }
        return TRUE;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
CreateNew::arguments protected function Returns the definition of the operation arguments. Overrides ImageToolkitOperationBase::arguments
CreateNew::execute protected function Performs the actual manipulation on the image. Overrides ImageToolkitOperationBase::execute
CreateNew::validateArguments protected function Validates the arguments. Overrides ImageToolkitOperationBase::validateArguments
GDImageToolkitOperationBase::getToolkit protected function The correctly typed image toolkit for GD operations. Overrides ImageToolkitOperationBase::getToolkit
ImageToolkitOperationBase::$logger protected property A logger instance.
ImageToolkitOperationBase::$toolkit protected property The image toolkit.
ImageToolkitOperationBase::apply final public function Applies a toolkit specific operation to an image. Overrides ImageToolkitOperationInterface::apply
ImageToolkitOperationBase::prepareArguments protected function Checks if required arguments are passed in and adds defaults for non passed
in optional arguments.
ImageToolkitOperationBase::__construct public function Constructs an image toolkit operation plugin.
PluginInspectionInterface::getPluginDefinition public function Gets the definition of the plugin implementation. 6
PluginInspectionInterface::getPluginId public function Gets the plugin_id of the plugin instance. 2

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