--- /dev/null
+<?php
+
+namespace Drupal\image;
+
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Plugin\PluginBase;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a base class for image effects.
+ *
+ * @see \Drupal\image\Annotation\ImageEffect
+ * @see \Drupal\image\ImageEffectInterface
+ * @see \Drupal\image\ConfigurableImageEffectInterface
+ * @see \Drupal\image\ConfigurableImageEffectBase
+ * @see \Drupal\image\ImageEffectManager
+ * @see plugin_api
+ */
+abstract class ImageEffectBase extends PluginBase implements ImageEffectInterface, ContainerFactoryPluginInterface {
+
+ /**
+ * The image effect ID.
+ *
+ * @var string
+ */
+ protected $uuid;
+
+ /**
+ * The weight of the image effect.
+ *
+ * @var int|string
+ */
+ protected $weight = '';
+
+ /**
+ * A logger instance.
+ *
+ * @var \Psr\Log\LoggerInterface
+ */
+ protected $logger;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct(array $configuration, $plugin_id, $plugin_definition, LoggerInterface $logger) {
+ parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+ $this->setConfiguration($configuration);
+ $this->logger = $logger;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+ return new static(
+ $configuration,
+ $plugin_id,
+ $plugin_definition,
+ $container->get('logger.factory')->get('image')
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function transformDimensions(array &$dimensions, $uri) {
+ // Most image effects will not change the dimensions. This base
+ // implementation represents this behavior. Override this method if your
+ // image effect does change the dimensions.
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDerivativeExtension($extension) {
+ // Most image effects will not change the extension. This base
+ // implementation represents this behavior. Override this method if your
+ // image effect does change the extension.
+ return $extension;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getSummary() {
+ return [
+ '#markup' => '',
+ '#effect' => [
+ 'id' => $this->pluginDefinition['id'],
+ 'label' => $this->label(),
+ 'description' => $this->pluginDefinition['description'],
+ ],
+ ];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function label() {
+ return $this->pluginDefinition['label'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getUuid() {
+ return $this->uuid;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setWeight($weight) {
+ $this->weight = $weight;
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getWeight() {
+ return $this->weight;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getConfiguration() {
+ return [
+ 'uuid' => $this->getUuid(),
+ 'id' => $this->getPluginId(),
+ 'weight' => $this->getWeight(),
+ 'data' => $this->configuration,
+ ];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setConfiguration(array $configuration) {
+ $configuration += [
+ 'data' => [],
+ 'uuid' => '',
+ 'weight' => '',
+ ];
+ $this->configuration = $configuration['data'] + $this->defaultConfiguration();
+ $this->uuid = $configuration['uuid'];
+ $this->weight = $configuration['weight'];
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function defaultConfiguration() {
+ return [];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function calculateDependencies() {
+ return [];
+ }
+
+}