class ImageWatermark in Image effect kit 8
Defines IEK - Watermark operation.
Plugin annotation
@ImageToolkitOperation(
id = "gd_iek_image_watermark",
toolkit = "gd",
operation = "iek_image_watermark",
label = @Translation("IEK - Watermark"),
description = @Translation("Add a watermark text on an image.")
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\ImageToolkit\ImageToolkitOperationBase implements ImageToolkitOperationInterface
- class \Drupal\system\Plugin\ImageToolkit\Operation\gd\GDImageToolkitOperationBase
- class \Drupal\iek\Plugin\ImageToolkit\Operation\gd\ImageWatermark
- class \Drupal\system\Plugin\ImageToolkit\Operation\gd\GDImageToolkitOperationBase
- class \Drupal\Core\ImageToolkit\ImageToolkitOperationBase implements ImageToolkitOperationInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of ImageWatermark
File
- src/
Plugin/ ImageToolkit/ Operation/ gd/ ImageWatermark.php, line 23 - Contains \Drupal\iek\Plugin\ImageToolkit\Operation\gd\ImageWatermark.
Namespace
Drupal\iek\Plugin\ImageToolkit\Operation\gdView source
class ImageWatermark extends GDImageToolkitOperationBase {
/**
* {@inheritdoc}
*/
protected function arguments() {
return [
'text' => [
'description' => 'Text',
],
'font' => [
'description' => 'Font',
],
'color' => [
'description' => 'Color',
],
'size' => [
'description' => 'Size',
],
'angle' => [
'description' => 'Angle',
],
'position' => [
'description' => 'Position',
],
'padding_top' => [
'description' => 'Padding top',
],
'padding_right' => [
'description' => 'Padding right',
],
'padding_bottom' => [
'description' => 'Padding bottom',
],
'padding_left' => [
'description' => 'Padding left',
],
];
}
/**
* {@inheritdoc}
*/
protected function validateArguments(array $arguments) {
if (empty($arguments['text'])) {
throw new \InvalidArgumentException("Invalid text ('{$arguments['text']}') specified for the image 'iek_image_watermark' operation");
}
if (empty($arguments['font'])) {
throw new \InvalidArgumentException("Invalid font ('{$arguments['font']}') specified for the image 'iek_image_watermark' operation");
}
// TODO - validate color code.
if ((int) $arguments['size'] <= 0) {
throw new \InvalidArgumentException("Invalid size ('{$arguments['size']}') specified for the image 'iek_image_watermark' operation");
}
if (!is_numeric($arguments['angle'])) {
throw new \InvalidArgumentException("Invalid angle ('{$arguments['angle']}') specified for the image 'iek_image_watermark' operation");
}
// Fail when padding is negative.
if ((int) $arguments['padding_top'] < 0) {
throw new \InvalidArgumentException("Invalid padding ('{$arguments['padding_top']}') specified for the image 'iek_image_watermark' operation");
}
// Fail when padding is negative.
if ((int) $arguments['padding_right'] < 0) {
throw new \InvalidArgumentException("Invalid padding ('{$arguments['padding_right']}') specified for the image 'iek_image_watermark' operation");
}
// Fail when padding is negative.
if ((int) $arguments['padding_bottom'] < 0) {
throw new \InvalidArgumentException("Invalid padding ('{$arguments['padding_bottom']}') specified for the image 'iek_image_watermark' operation");
}
// Fail when padding is negative.
if ((int) $arguments['padding_left'] < 0) {
throw new \InvalidArgumentException("Invalid padding ('{$arguments['padding_left']}') specified for the image 'iek_image_watermark' operation");
}
return $arguments;
}
/**
* {@inheritdoc}
*/
protected function execute(array $arguments = []) {
$file_system = \Drupal::service('file_system');
$token = \Drupal::hasService('token') ? \Drupal::service('token') : NULL;
$data = $arguments;
$width = $this
->getToolkit()
->getWidth();
$height = $this
->getToolkit()
->getHeight();
$text = $token ? $token
->replace($data['text']) : $data['text'];
$angle = 360 - $data['angle'];
$size = $data['size'];
$position = $data['position'];
$padding_top = $data['padding_top'];
$padding_right = $data['padding_right'];
$padding_bottom = $data['padding_bottom'];
$padding_left = $data['padding_left'];
$iek_font = iek_get_watermark_fonts($data['font']);
$font = $file_system
->realpath($iek_font['path'] . '/' . $iek_font['file']);
$dst = imagecreatetruecolor($width, $height);
$text_rgb = iek_hex2rgb($data['color']);
$text_color = imagecolorallocate($dst, $text_rgb['red'], $text_rgb['green'], $text_rgb['blue']);
// Wraps the watermark text.
$bbox = imagettfbbox($size, $angle, $font, $text);
$bbox_width = abs($bbox[2] - $bbox[0]);
$bbox_height = abs($bbox[5] - $bbox[3]);
$bbox_character_width = 0;
if (strlen($text)) {
$bbox_character_width = ceil($bbox_width / strlen($text));
}
$bbox_character_height = ceil($bbox_height);
$text_arr = [];
if ($bbox_character_width) {
$text_arr = chunk_split($text, ceil(($width - abs(($padding_left + $padding_right) * 2)) / $bbox_character_width), ':::');
$text_arr = explode(':::', $text_arr);
}
switch ($position) {
case 'top_left':
$new_y = $bbox_character_height + $padding_top;
foreach ($text_arr as $text_arr_item) {
$new_x = $padding_left;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'top_center':
$new_y = $bbox_character_height + $padding_top;
foreach ($text_arr as $text_arr_item) {
$new_x = ($width - $bbox_character_width * strlen($text_arr_item)) / 2;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'top_right':
$new_y = $bbox_character_height + $padding_top;
foreach ($text_arr as $text_arr_item) {
$cur_bbox = imagettfbbox($size, $angle, $font, $text_arr_item);
$cur_bbox_width = abs($cur_bbox[2] - $cur_bbox[0]);
$new_x = $width - $cur_bbox_width - $padding_right;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'middle_left':
$new_y = $height / 2 - $bbox_character_height * count($text_arr) / 2 + $bbox_character_height;
foreach ($text_arr as $text_arr_item) {
$new_x = $padding_left;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'middle_center':
$new_y = $height / 2 - $bbox_character_height * count($text_arr) / 2 + $bbox_character_height;
foreach ($text_arr as $text_arr_item) {
$new_x = ($width - $bbox_character_width * strlen($text_arr_item)) / 2;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'middle_right':
$new_y = $height / 2 - $bbox_character_height * count($text_arr) / 2 + $bbox_character_height;
foreach ($text_arr as $text_arr_item) {
$cur_bbox = imagettfbbox($size, $angle, $font, $text_arr_item);
$cur_bbox_width = abs($cur_bbox[2] - $cur_bbox[0]);
$new_x = $width - $cur_bbox_width - $padding_left;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'bottom_left':
$new_y = $height - $bbox_character_height * count($text_arr) - $padding_bottom + $bbox_character_height * 2;
foreach ($text_arr as $text_arr_item) {
$new_x = $padding_left;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'bottom_center':
$new_y = $height - $bbox_character_height * count($text_arr) - $padding_bottom + $bbox_character_height * 2;
foreach ($text_arr as $text_arr_item) {
$new_x = ($width - $bbox_character_width * strlen($text_arr_item)) / 2;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
case 'bottom_right':
$new_y = $height - $bbox_character_height * count($text_arr) - $padding_bottom + $bbox_character_height * 2;
foreach ($text_arr as $text_arr_item) {
$cur_bbox = imagettfbbox($size, 0, $font, $text_arr_item);
$cur_bbox_width = abs($cur_bbox[2] - $cur_bbox[0]);
$new_x = $width - $cur_bbox_width - $padding_left;
imagettftext($this
->getToolkit()
->getResource(), $size, $angle, $new_x, $new_y, $text_color, $font, $text_arr_item);
$new_y += $bbox_character_height;
}
break;
default:
$new_x = 0;
$new_y = 0;
}
return TRUE;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
GDImageToolkitOperationBase:: |
protected | function |
The correctly typed image toolkit for GD operations. Overrides ImageToolkitOperationBase:: |
|
ImageToolkitOperationBase:: |
protected | property | A logger instance. | |
ImageToolkitOperationBase:: |
protected | property | The image toolkit. | |
ImageToolkitOperationBase:: |
final public | function |
Applies a toolkit specific operation to an image. Overrides ImageToolkitOperationInterface:: |
|
ImageToolkitOperationBase:: |
protected | function | Checks if required arguments are passed in and adds defaults for non passed in optional arguments. | |
ImageToolkitOperationBase:: |
public | function |
Constructs an image toolkit operation plugin. Overrides PluginBase:: |
|
ImageWatermark:: |
protected | function |
Returns the definition of the operation arguments. Overrides ImageToolkitOperationBase:: |
|
ImageWatermark:: |
protected | function |
Performs the actual manipulation on the image. Overrides ImageToolkitOperationBase:: |
|
ImageWatermark:: |
protected | function |
Validates the arguments. Overrides ImageToolkitOperationBase:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |