class CreateNew
Same name in other branches
- 9 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/CreateNew.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\CreateNew
- 10 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/CreateNew.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\CreateNew
- 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
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
- class \Drupal\Core\ImageToolkit\ImageToolkitOperationBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\Core\ImageToolkit\ImageToolkitOperationInterface
- class \Drupal\system\Plugin\ImageToolkit\Operation\gd\GDImageToolkitOperationBase extends \Drupal\Core\ImageToolkit\ImageToolkitOperationBase
- class \Drupal\system\Plugin\ImageToolkit\Operation\gd\CreateNew extends \Drupal\system\Plugin\ImageToolkit\Operation\gd\GDImageToolkitOperationBase
- class \Drupal\system\Plugin\ImageToolkit\Operation\gd\GDImageToolkitOperationBase extends \Drupal\Core\ImageToolkit\ImageToolkitOperationBase
- class \Drupal\Core\ImageToolkit\ImageToolkitOperationBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\Core\ImageToolkit\ImageToolkitOperationInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
Expanded class hierarchy of CreateNew
File
-
core/
modules/ system/ src/ Plugin/ ImageToolkit/ Operation/ gd/ CreateNew.php, line 18
Namespace
Drupal\system\Plugin\ImageToolkit\Operation\gdView 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.